Prometheus + Grafana + Eksportir Node + Docker di Azure dengan pemberitahuan di Telegram

Pertama, persiapkan mesin virtual, untuk ini kami menulis skrip kecil yang menyebarkan dan mengotomatiskan beberapa operasi rutin, skrip menggunakan Azure Cli:


project.sh
#!/bin/bash echo "AZURE VM Create" echo "Azure Account:" echo "Azure name:" read AZ_NAME read -sp "Azure password: " AZ_PASS && echo && az login -u $AZ_NAME -p $AZ_PASS echo "Name Group VM" read GROUP_NAME az group create --name $GROUP_NAME --location eastus echo "VM name" read VM echo "Admin user name" read ADMIN az vm create --resource-group $GROUP_NAME --name $VM --image UbuntuLTS --admin-username $ADMIN --generate-ssh-keys --custom-data cloud-init.txt az vm open-port --resource-group $GROUP_NAME --name $VM --port 8080 --priority 1001 az vm open-port --resource-group $GROUP_NAME --name $VM --port 8081 --priority 1002 az vm open-port --resource-group $GROUP_NAME --name $VM --port 9090 --priority 1003 az vm open-port --resource-group $GROUP_NAME --name $VM --port 9093 --priority 1004 az vm open-port --resource-group $GROUP_NAME --name $VM --port 9100 --priority 1005 az vm open-port --resource-group $GROUP_NAME --name $VM --port 3000 --priority 1006 RESULT=$(az vm show --resource-group $GROUP_NAME --name $VM -d --query [publicIps] --o tsv) echo $RESULT echo "Whait 5 min" sleep 300 ssh $ADMIN@$RESULT -y << EOF sudo usermod -aG docker $ADMIN EOF sleep 10 echo "Connect to Azure..." 

Dalam skrip, kami menggunakan file cloud-init.txt yang secara otomatis akan menginstal Docker dan Docker-Compose di mesin virtual.


cloud-init.txt
 #cloud-config package_upgrade: true write_files: - path: /etc/systemd/system/docker.service.d/docker.conf content: | [Service] ExecStart= ExecStart=/usr/bin/dockerd - path: /etc/docker/daemon.json content: | { "hosts": ["fd://","tcp://127.0.0.1:2375"] } runcmd: - apt-get update && apt-get install mc -y - curl -sSL https://get.docker.com/ | sh - curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose - chmod +x /usr/local/bin/docker-compose 

Di direktori home, buat folder untuk proyek dan file docker-compose.yaml


docker-compose.yaml
 version: '3.2' services: alertmanager-bot: image: metalmatze/alertmanager-bot:0.3.1 environment: - ALERTMANAGER_URL=http://<alertmngerURL>:9093 #    - LISTEN_ADDR=0.0.0.0:8080 - BOLT_PATH=/data/bot.db - STORE=bolt - TELEGRAM_ADMIN=<TelegramAdminID> # ID   - TELEGRAM_TOKEN=<TelegramBotToken> #   - TEMPLATE_PATHS=/templates/default.tmpl volumes: - /srv/monitoring/alertmanager-bot:/data ports: - 8080:8080 prometheus: image: prom/prometheus:latest volumes: - ./prometheus:/etc/prometheus/ command: - --config.file=/etc/prometheus/prometheus.yml ports: - 9090:9090 links: - cadvisor:cadvisor depends_on: - cadvisor restart: always node-exporter: image: prom/node-exporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - --path.procfs=/host/proc - --path.sysfs=/host/sys - --collector.filesystem.ignored-mount-points - ^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/) ports: - 9100:9100 restart: always deploy: mode: global alertmanager: image: prom/alertmanager ports: - 9093:9093 volumes: - ./alertmanager/:/etc/alertmanager/ restart: always command: - --config.file=/etc/alertmanager/config.yml - --storage.path=/alertmanager cadvisor: image: google/cadvisor volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - 8081:8080 restart: always deploy: mode: global grafana: image: grafana/grafana depends_on: - prometheus ports: - 3000:3000 volumes: - ./grafana:/var/lib/grafana - ./grafana/provisioning/:/etc/grafana/provisioning/ restart: always 

Jangan lupa bahwa dalam yaml seharusnya tidak ada tab, hanya spasi, perhatikan ini dengan cermat. Mari kita lihat file docker-compose.yaml secara lebih rinci:


image: - berikut ini adalah gambar container docker yang akan kita gunakan


Sekarang mari kita mulai membuat bot Telegram. Kami tidak akan membahas hal ini secara terperinci, Internet penuh dengan deskripsi, saya hanya akan mengatakan bahwa penciptaan terjadi melalui bot @BotFather .


Kami membutuhkan Token bot dan TelegramID Anda untuk mengelola bot, Anda harus mengganti data ini ke docker-compose.yaml


Mari kita buat file:
prometheus.yml di direktori prometheus yang menjelaskan server untuk mengumpulkan metrik dan mengirim peringatan.


prometheus.yml
 scrape_configs: - job_name: node scrape_interval: 5s static_configs: - targets: ['ip_node_explorer:9100'] rule_files: - './con.yml' alerting: alertmanagers: - static_configs: - targets: ['ip_alertmanager:9093'] 

con.yml di direktori yang sama untuk deskripsi peringatan. Lansiran ini menjelaskan satu lansiran yang memeriksa apakah Eksportir Node kami masih hidup.


con.yml
 groups: - name: ExporterDown rules: - alert: NodeDown expr: up{job='Node'} == 0 for: 1m labels: severity: Error annotations: summary: "Node Explorer instance ($instance) down" description: "NodeExporterDown" 

config.yml di direktori alertmanager tempat kami menambahkan koneksi ke bot Telegram


config.yml
 route: group_wait: 20s #  group_interval: 20s #  repeat_interval: 60s #   group_by: ['alertname', 'cluster', 'service'] receiver: alertmanager-bot receivers: - name: alertmanager-bot webhook_configs: - send_resolved: true url: 'http://ip_telegram_bot:8080' 

Jalankan gambar kami dan periksa hasilnya:


 docker-compose up -d 

 docker-compose ps 

Anda harus mendapatkan sesuatu yang mirip dengan ini:



Seperti yang kita lihat status untuk semua wadah, jika karena alasan tertentu salah satu wadah tidak mulai, kita dapat melihat log dengan perintah:


 docker logs < > 

misalnya:


 docker logs docker logs project_alertmanager_1 

akan memberi kita hasil ini:



Sekarang buat skrip test.sh untuk memeriksa notifikasi


test.sh
 #!/bin/sh curl \ --request POST \ --data '{"receiver":"telegram","status":"firing","alerts":[{"status":"firing","labels":{"alertname":"Fire","severity":"critical"},"annotations":{"message":"Something is on fire"},"startsAt":"2018-11-04T22:43:58.283995108+01:00","endsAt":"2018-11-04T22:46:58.283995108+01:00","generatorURL":"http://localhost:9090/graph?g0.expr=vector%28666%29\u0026g0.tab=1"}],"groupLabels":{"alertname":"Fire"},"commonLabels":{"alertname":"Fire","severity":"critical"},"commonAnnotations":{"message":"Something is on fire"},"externalURL":"http://localhost:9093","version":"4","groupKey":"{}:{alertname=\"Fire\"}"}' \ localhost:8080 

setelah peluncurannya, bot harus mengirim pesan pengujian.
Kami juga dapat memeriksa operasi peringatan kami yang dijelaskan dalam con.yml , untuk ini kami menghentikan Node Eksportir dengan perintah


 docker stop <  node exporter> 

setelah dua menit, bot akan mengirimi Anda pemberitahuan bahwa server telah mogok, mulai Node Eksportir dengan perintah


 docker start <  node exporter> 

Dan setelah waktu tertentu, bot akan merespons bahwa server telah dimulai.


Itu saja, di artikel selanjutnya saya akan mengajarkan Anda untuk menghubungkan metrik tambahan dan membuat pemberitahuan di Prometheus.

Source: https://habr.com/ru/post/id439858/


All Articles