diff --git a/TP6 log.txt b/TP6 log.txt index 642ee9440526b3f94e2b3ac420e623f596d675ae..c26de2334a6fc52f1501e104415177188e487b1f 100644 --- a/TP6 log.txt +++ b/TP6 log.txt @@ -1,20 +1,7 @@ TP6 (13.11.2020) Monitoring -Prometheus permet de faire du monitoring sur toutes les containers docker sur une seule machine et même machine. -Il est donc impossible de surveiller le container d'une machine différente. -(https://phoenixnap.com/blog/docker-container-monitoring-tools) -Pour installer prometheus, j'ai du créer un fichier prometheus.yml avec le contenu suivant - -scrape_configs: -- job_name: nginx_survey - scrape_interval: 5s - static_configs: - - targets: - - 172.28.100.90:9090 - - - +Partie test sur ma propre machine: node_exporter / prometheus / graphana @@ -28,20 +15,82 @@ On va créer un volume (on va juste binder l'arborescence de la machine hote au Il faut lier le réseau du container avec le réseau de la machine hote (= et donc --network host) prom/node-exporter est l'image dispo sur docker hub. +Les informations utiles de node-exporter: +CPU: + rate(node_cpu_seconds_total{mode="system",instance="addrIPDUnWorker"}[1m]) + => renvoie pour chaque core du CPU l'utilisation en mode 'system' pour la dernière minute + (voir https://www.robustperception.io/understanding-machine-cpu-usage pour d'autres metriques) + +RAM: + RAM disponible: + node_memory_MemFree_bytes{instance="addrIPDUnWorker"} + RAM totale: + node_memory_MemTotal_bytes{instance="addrIPDUnWorker"} +Bande passante: + bytes reçus: + rate(node_network_receive_bytes_total{device="ens3",instance="addrIPDUnWorker"}[1m]) + => ens3 étant la carte réseau du worker conn. à internet + bytes transmis: + rate(node_network_transmit_bytes_total{device="ens3",instance="addrIPDUnWorker"}[1m]) +Espace disponible pour les utilisateurs non-root: + rate(node_filesystem_avail_bytes[1m]) + => donne toutes les partitions du disque avec la taille des dossiers + node_filesystem_avail_bytes{device="/dev/vda1",instance="addrIPDUnWorker",mountpoint="/hostfs"} + => donne la taille encore disponible sur le disque -Prometheus permet de récuperer et analyser les données de node exporter. -J'ai eu qques porblèmes pour permettre au container prometheus de reconnaitre l'addr ip de ma machine hote. -J'ai trouvé ensuite la solution c'est qu'il fallait mettre le container sur le même network que le container node-export, -cad. '--network host' => le même network que la machine hote. -#docker run --rm -p 9090:9090 --network host -v "$(pwd)/prometheus.yml":/etc/prometheus/prometheus.yml prom/prometheus -devient -#docker run --rm --network host -v "$(pwd)/prometheus.yml":/etc/prometheus/prometheus.yml prom/prometheus -où je met en place un volume où mon fichier prometheus (voir TP6_20.11.20/prometheus.yml) dans /etc/prometheus/ avec le même nom de fichier. + + +Prometheus +permet de récuperer et analyser les données de node exporter. +Aller dans le dossier /TP6_20.11.20/ et lancer: +#docker run --rm -p 9090:9090 -v "$(pwd)/prometheus.yml":/etc/prometheus/prometheus.yml prom/prometheus +où je met en place un volume où mon fichier prometheus (voir TP6_20.11.20/prometheus.yml) est lié dans /etc/prometheus/ avec le même nom de fichier. et j'utilise l'image 'prom/prometheus'. +Graphana +Est un outil qui permet d'avoir des graphes plus esthétiques + +#docker run --rm -p 3000:3000 grafana/grafana +(éventuellement --net host) + +user: admin +passwd: admin +(inutile de réinitialiser le mdp) +Ajouter une datasources -> prometheus -> url -> IP de la machine hébergant prometheus +Aller sur Dashboards -> add new panel -> mettre dans le champ 'Metrics' la query testée auparavant sur prometheus. + + + + +Partie Mise en place sur mes 4 workers: +Prometheus et graphana seront 2 containers distincts sur le worker 2 car celui avec loadbalencer nginx prends déjà bcp de CPU +Worker1: + - loadbalencer nginx:9080 + - serveur_go:8000 + - node-exporter:9100 +Worker2: + - serveur_go:8000 + - node-exporter:9100 + - prometheus:9090 + - grafana:3000 +Worker3: + - serveur_go:8000 + - node-exporter:9100 +Worker4: + - serveur_go:8000 + - node-exporter:9100 + +(ts les fichiers utilisés sont dans /TP6_20.11.20/ansible) + +commande: +Aller dans le dossier /TP6_20.11.20/ansible/ et lancer: +#ansible-playbook -i hosts.yml grafana_prometheus_and_nodeWorker.yml --private-key ssh-private-key.txt + + +L'image représentant les graphes grafana se situe dans /TP6_20.11.20/ diff --git a/TP6_20.11.20/4_workers_dashboard.png b/TP6_20.11.20/4_workers_dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..c281587e090b3d1f133d641280fd5df3b27f8f22 Binary files /dev/null and b/TP6_20.11.20/4_workers_dashboard.png differ diff --git a/TP6_20.11.20/ansible/grafana_prometheus_and_nodeWorker.yml b/TP6_20.11.20/ansible/grafana_prometheus_and_nodeWorker.yml new file mode 100644 index 0000000000000000000000000000000000000000..a122a974c95af802bb9f25434fbcb576b24f8b43 --- /dev/null +++ b/TP6_20.11.20/ansible/grafana_prometheus_and_nodeWorker.yml @@ -0,0 +1,74 @@ +--- +- name: Install node-exporter containers and prometheus container + hosts: all + become: true + + tasks: + #copy directory part + - name: copy prometheus.yml file for worker 2. + copy: + src: "/home/pierre/Bureau/DAC/dac-tp/TP6_20.11.20/ansible/prometheus" + dest: "/root/" + ignore_errors: yes + when: + - ansible_default_ipv4.address == "172.28.100.99" + + + + - name: stop and remove contgrafana + docker_container: + name: contgrafana + state: absent + when: + - ansible_default_ipv4.address == "172.28.100.99" + + - name: stop and remove contprometheus + docker_container: + name: contprometheus + state: absent + when: + - ansible_default_ipv4.address == "172.28.100.99" + + - name: stop and remove contnode_exporter + docker_container: + name: contnode_exporter + state: absent + + + + + + + - name: build contnode_exporter container for all workers + docker_container: + name: contnode_exporter + image: prom/node-exporter + # ports: + # - "9100:9100" + state: started + volumes: + - /:/hostfs + network_mode: host + + - name: build contprometheus container for worker 2(172.28.100.99) + docker_container: + name: contprometheus + image: prom/prometheus + ports: + - "9090:9090" + state: started + volumes: + - /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + when: + - ansible_default_ipv4.address == "172.28.100.99" + + - name: build contgrafana container for worker 2(172.28.100.99) + docker_container: + name: contgrafana + image: grafana/grafana + ports: + - "3000:3000" + state: started + when: + - ansible_default_ipv4.address == "172.28.100.99" + diff --git a/TP6_20.11.20/ansible/prometheus/prometheus.yml b/TP6_20.11.20/ansible/prometheus/prometheus.yml index a0497c2f96cd1fe0c7c313caf9871d02680c3f61..8d2c92d1499c87bae57715fdb5737260ce21b799 100644 --- a/TP6_20.11.20/ansible/prometheus/prometheus.yml +++ b/TP6_20.11.20/ansible/prometheus/prometheus.yml @@ -4,9 +4,9 @@ scrape_configs: scrape_interval: 5s static_configs: # - targets: [ '192.168.1.4:9100' ] - - targets: ['172.28.100.90:9100', '172.28.100.51:9100', '172.28.100.111:9100', '172.28.100.72:9100'] + - targets: [ '172.28.100.111:9100', '172.28.100.99:9100', '172.28.100.51:9100', '172.28.100.19:9100' ] labels: - group: 'workers' + group: 'workers_machines' # - targets: ['172.28.100.90:9090'] # labels: diff --git a/TP6_20.11.20/ansible/prometheus_and_nodeWorker.yml b/TP6_20.11.20/ansible/prometheus_and_nodeWorker.yml deleted file mode 100644 index 1a64aaef41fdd747f299e9104b9cdba09265fe68..0000000000000000000000000000000000000000 --- a/TP6_20.11.20/ansible/prometheus_and_nodeWorker.yml +++ /dev/null @@ -1,62 +0,0 @@ ---- -- name: Install node-exporter containers and prometheus container - hosts: all - become: true - - tasks: - #copy directory part - - name: copy prometheus.yml file for worker 1/loadbal. - copy: - src: "/home/pierre/Bureau/DAC/dac-tp/TP6_20.11.20/ansible/prometheus" - dest: "/root/" - ignore_errors: yes - when: - - ansible_default_ipv4.address == "172.28.100.111" - - - - name: stop and remove contnode_exporter - docker_container: - name: contnode_exporter - state: absent - - - name: stop and remove contprometheus - docker_container: - name: contprometheus - state: absent - when: - - ansible_default_ipv4.address == "172.28.100.111" - - - - - # - name: build contnode_exporter container for all workers - # docker_container: - # name: contnode_exporter - # image: prom/node-exporter - # # ports: - # # - "9100:9100" - # state: started - # volumes: - # - /:/hostfs - # network_mode: host - - - name: build contprometheus container for worker 1(172.28.100.111) - docker_container: - name: contprometheus - image: prom/prometheus - # ports: - # - "9091:9090" - state: started - volumes: - - /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml - # network_mode: host - when: - - ansible_default_ipv4.address == "172.28.100.111" - - - - - - - -