Pertama, persiapkan mesin virtual, untuk ini kami menulis skrip kecil yang menyebarkan dan mengotomatiskan beberapa operasi rutin, skrip menggunakan Azure Cli:
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.