diff --git a/ascii.adoc b/ascii.adoc new file mode 100644 index 0000000..5c6479b --- /dev/null +++ b/ascii.adoc @@ -0,0 +1,97 @@ += Εργασία Εξαμήνου Υπολογιστική Νέφους και Υπηρεσίες +Ομάδα Γουργολίτσα Αικατερίνη Α.Μ. :171193 +Πετρίδου Αναστασία Α.Μ. :47431 + +:toc: right +:toc-title: Πίνακας περιεχομένων +:toclevels: 4 +:icons: font +:tabs: + +.*ΕΙΣΑΓΩΓΗ* + +Αρχικά επιλέξαμε να ασχοληθούμε με το project "Data collector service" το οποίο χωρίζεται σε 3 ενότητες. + +Επιλέγουμε ένα hybrid-linux εργατήριο και σηκώνουμε 5 μηχανάκια. +image:images/1.png[] + +Μετα, επιλέγουμε την ansible τεχνολογία και με μια ssh σύνδεση θα μπορέσουμε να διαχειριστούμε τα υπόλοιπα μέλη. +Όταν σηκωθούν τα μηχανάκια πηγαίνουμε στον container επιλέγουμε τον Master και κάνουμε connect.(παίρνουμε την εντολή που βγάζει και την τρέχουμε στο τέρμιναλ .Στην συνέχεια τρέχουμε την εντολή + +---- +ifconfig +---- + +image:images/2.png[] + +Βλέπουμε τα μέλη με την εντολή + +---- +./bin/swarmlab-nmap +---- + +image:images/3.png[] + + +Στην συνέχεια μπαίνουμε στους φακέλους όπου βρίσκονται τα αρχεία. + +---- +cd courses +cd fluentd +---- + +Στο αρχείο fluentd.yml.sh εγκαθιστούμε το ansible και βρίσκουμε την τοπική ip. +Στο αρχείο fluentd.yml βάζουμε αρχικά τον χρήστη docker και στην συνέχεια έχουμε τα tasks.Στο πρώτο θέμα κάνουμε το update.Στο επόμενο κάνουμε install ορισμένα πακέτα όπως το curl ,το git το ruby κ.α.Το επόμενο Block φτιάχνει έναν κατάλογο απομακρυσμένο.Στο επόμενο γίνεται η εγκατάσταση του fluentd μέσω του gem.Στο αρχείο fluentd-test-mongo.yml δοκιμάζουμε την mongo εκτελώντας την εντολή df -h σε όλους τους hosts του swarm.Το fluentd-test-mongo.yml.sh βρίσκει τις ips του swarm, θα ανανεώσει το inventory.yml .Στο αρχείο fluentd-test-mongo-free.yml.sh βρίσκουμε τις ip .Το fluentd-test-mongo-free.yml.sh που βρίσκει τις ips του swarm και ανανεώνει το inventory.yml .Στο αρχείο inventory.yml βρίσκονται διευθύνσεις IP όλων των hosts του swarm. +/files βρίσκονται τα configuration files της ansible και του fluent.Τέλος,βάζουμε σε λειτουργία το fuentd (#start fluentd). + +.Αυτόματη εγκατάσταση προγράμματος για την συλλογή των δεδομένων +Έπειτα θα βάλουμε σε όλα τα μηχανάκια το fluentd και οτιδήποτε συμβαίνει θα μεταφέρεται σε ένα κεντρικό σημείο και έτσι θα συλλέγουμε τα δεδομένα. +Τρέχουμε την εντολή για να εγκαταστησουμε ansible και το fluentd .Κωδικός docker. + +---- +./fluentd.yml.sh +---- + +image:images/5.png[] + +image:images/9.png[] + + +Στην συνέχεια συνδέομαστε σε ένα μηχανάκι με την εντολή + +---- +ssh docker @172.21.0.2 +---- + +image:images/10.png[] + + +κι διαπυστώνουμε οτι λειτουργεί το fluentd με την εντολή: ps aux + +image:images/11.png[] + + +Ετσι φτιαξάμε την βασική μας λειτουργία και στην συνέχεια θα σηκώσουμε μια υπηρεσία nodejs που μεταδίδεται από το Master. Εγκαθιστούμε το application με την εντολή + +---- +./app.js.sh +---- + +βρισκουμε την ip και παρατηρούμε οτι συνδέεται στην πόρτα 8000 με τις παρακάτω εντολές + + +---- +ifconfig +node app.sh +---- + +image:images/12.png[] + + + +Μέτα εφάρμοζουμε την παράκατω εντολή βάζοντας ενα τυχαίο μήνυμα ώστε να διαπιστώσουμε οτι επικοινώνουν μεταξύ τους + +---- +curl http://172.21.0.2:8000/?log=HelloWorld +curl http://172.21.0.2:8000/?log=HelloWorldByeee +---- + +image:images/13.png[] + +image:images/14.png[] + +image:images/15.png[] + + + + + + diff --git a/fluentd-config-update.yml.sh b/fluentd-config-update.yml.sh new file mode 100644 index 0000000..f16098b --- /dev/null +++ b/fluentd-config-update.yml.sh @@ -0,0 +1,15 @@ +#!/bin/sh + + +ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) +ip6=$(/sbin/ip -o -6 addr list eth0 | awk '{print $4}' | cut -d/ -f1) + +echo "[service]" > /project/courses/fluentd/inventory.yml +/project/bin/swarmlab-nmap >> /project/courses/fluentd/inventory.yml + + +# include master or not +echo $ip4 >> /project/courses/fluentd/inventory.yml + + +ansible-playbook -u docker -i inventory.yml fluentd-config-update.yml -f 5 --ask-pass --ask-become-pass \ No newline at end of file diff --git a/fluentd-test-mongo.yml b/fluentd-test-mongo.yml new file mode 100644 index 0000000..d01228c --- /dev/null +++ b/fluentd-test-mongo.yml @@ -0,0 +1,54 @@ +--- +- hosts: service + remote_user: docker + gather_facts: no + vars: + user: "docker" + + tasks: + +# -------------------------------------------------------------------------------------- +# --------------------- create test dir +# -------------------------------------------------------------------------------------- + + # ------------------------ + # test dir + # ------------------------- + - name: make dir for test + become: true + file: + path: "/var/log-in/test" + state: directory + owner: docker + group: docker + mode: '0755' + + - name: make dir2 + become: true + file: + path: "/var/log-in/test1" + state: directory + owner: docker + group: docker + mode: '0755' + +# -------------------------------------------------------------------------------------- +# --------------------- kill and save ps tp tmp +# -------------------------------------------------------------------------------------- + + - name: find fluentd + #shell: df -h >> /var/log-in/test/test + shell: df -h + #shell: "ps efw -opid,cmd -Cfluentd | pgrep -o fluentd" + register: fluentddate + + - name: ls fluentddate + debug: var=fluentddate.stdout_lines + + - name: write to /var/log-in/test/test2 + shell: "echo {{ item }} >> /var/log-in/test/test2" + with_items: "{{ fluentddate.stdout_lines }}" + + - name: write to /var/log-in/test1/test11 + shell: "echo {{ item }} >> /var/log-in/test1/test11" + with_items: "{{ fluentddate.stdout_lines }}" \ No newline at end of file diff --git a/fluentd.yml b/fluentd.yml new file mode 100644 index 0000000..88f72ba --- /dev/null +++ b/fluentd.yml @@ -0,0 +1,199 @@ +--- +- hosts: service + remote_user: docker + gather_facts: no + vars: + user: "docker" + + tasks: + + # ------------------------ + # apt update + # ------------------------- + - name: apt update packages + become: true + apt: + update_cache: 'yes' + force_apt_get: 'yes' + upgrade: 'dist' + cache_valid_time: 3600 + install_recommends: true + autoremove: true + + # ------------------------ + # apt install packages + # ------------------------- + - name: apt install packages + become: true + apt: + update_cache: 'yes' + force_apt_get: 'yes' + install_recommends: true + autoremove: true + name: "{{ packages }}" + vars: + packages: + - build-essential + - git + - flex + - bison + - traceroute + - curl + - lynx + - ruby + - ruby-dev + + # ------------------------ + # directory4example fluentd + # ------------------------- + - name: make /var/log-in + become: true + file: + path: "/var/log-in" + state: directory + owner: docker + group: docker + mode: '0777' + + # ------------------------ + # gem begin + # ------------------------- + - name: make dir for gem + become: true + file: + path: "/home/docker/.gem" + state: directory + owner: docker + group: docker + mode: '0755' + + - name: gem install fluentd + #become: true + gem: + name: fluentd + version: 1.12.0 + state: present + environment: + CONFIGURE_OPTS: '--disable-install-doc' + PATH: '/home/docker/.gem/ruby/2.5.0/bin:{{ ansible_env.PATH }}' + + - name: gem install fluent-plugin-mongo + #become: true + gem: + name: fluent-plugin-mongo + state: present + + - name: gem install oj + #become: true + gem: + name: oj + state: present + + - name: gem install json + #become: true + gem: + name: json + state: present + + - name: gem install async-http + #become: true + gem: + name: async-http + version: 0.54.0 + state: present + + - name: gem install ext-monitor + #become: true + gem: + name: ext_monitor + version: 0.1.2 + state: present + + # ------------------------ + # gem end + # ------------------------- + + # ------------------------ + # add group + # ------------------------- +# - name: add group fluent +# become: true +# group: +# name: fluent +# state: present +# + # ------------------------ + # add user + # ------------------------- +# - name: add user gem +# become: true +# user: +# name: fluent +# group: fluent + + # ------------------------ + # mkdir directory4 fluent + # ------------------------- + - name: make dir fluentd + become: true + file: + path: "/fluentd/etc" + state: directory + owner: docker + group: docker + mode: '0755' + + - name: make dir fluentd + become: true + file: + path: "/fluentd/plugins" + state: directory + owner: docker + group: docker + mode: '0755' + + # ------------------------ + # cp fluentd.conf + # ------------------------- + - name: cp fluentd.conf + become: true + copy: + src: "./files/fluent.conf" + dest: /fluentd/etc/fluent.conf + owner: docker + group: docker + mode: 0755 + + # ------------------------ + # start fluentd + # ------------------------- + - name: start fluentd background + shell: nohup /home/docker/.gem/ruby/2.5.0/bin/fluentd -c /fluentd/etc/fluent.conf -vv /dev/null 2>&1 & + + # ------------------------ + # example4net tcpdump example + # ------------------------- +# - name: google.com +# become: yes +# become_user: "{{ user }}" +# command: curl http://www.google.com +# ignore_errors: yes +# register: configwww +# +# - name: ls configwww +# debug: var=configwww.stdout_lines +# +# - name: ls -al /var/lab/playground/playground-readmongo/ +# become: yes +# become_user: "{{ user }}" +# #command: ls -al /var/lab/playground/playground-readmongo +# command: netstat -antlupe +# ignore_errors: yes +# register: config +# +# - name: ls config +# debug: var=config.stdout_lines +# +# - name: Refresh connection +# meta: clear_host_errors +# \ No newline at end of file diff --git a/fluentd.yml.sh b/fluentd.yml.sh new file mode 100644 index 0000000..345a999 --- /dev/null +++ b/fluentd.yml.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +sudo apt update -y +sudo apt install -y ansible sshpass + +sudo mkdir -p /home/docker/.ansible +sudo chown docker.docker -R /home/docker + +sudo cp files/ansible.cfg /etc/ansible/ansible.cfg + +ip4=$(/sbin/ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1) +ip6=$(/sbin/ip -o -6 addr list eth0 | awk '{print $4}' | cut -d/ -f1) + +echo "[service]" > /project/courses/fluentd/inventory.yml +/project/bin/swarmlab-nmap >> /project/courses/fluentd/inventory.yml + + +# include master or not +echo $ip4 >> /project/courses/fluentd/inventory.yml + + +ansible-playbook -u docker -i inventory.yml fluentd.yml -f 5 --ask-pass --ask-become-pass +# 1st make sudo without password +# run with keys +#ansible-playbook -u docker -i inventory.yml fluentd.yml -f 5 --private-key=/home/docker/.ssh/id_rsa \ No newline at end of file