Prometheus + Grafana + Node Exporter + Docker in Azure مع الإخطارات في Telegram

أولاً ، قم بإعداد جهاز افتراضي ، لذلك سنقوم بكتابة نص صغير ينشر بعض العمليات الروتينية وأتمتة ، يستخدم البرنامج النصي 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..." 

في البرنامج النصي ، نستخدم ملف cloud-init.txt الذي سيقوم تلقائيًا بتثبيت Docker و Docker-Compose على الجهاز الظاهري.


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 

في الدليل الرئيسي ، قم بإنشاء مجلد للمشروع وملف 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 

لا تنس أنه في yaml يجب ألا تكون هناك علامات تبويب ، فقط مسافات ، شاهد هذا بعناية. لنلقِ نظرة على ملف docker-compose.yaml بمزيد من التفاصيل:


image: - فيما يلي صور حاوية عامل الميناء التي سنستخدمها


الآن لنبدأ في إنشاء روبوت Telegram. نحن لن نتطرق إلى هذا بالتفصيل ، الإنترنت مليء بالأوصاف ، سأقول فقط أن الخلق يحدث عبر بوت بوتير @ بوت.


نحتاج إلى رمز البوت و TelegramID الخاص بك من أجل إدارة البوت ، أنت بحاجة إلى استبدال هذه البيانات في ملف docker-compose.yaml


لنقم بإنشاء الملفات:
prometheus.yml في دليل prometheus الذي يصف الخوادم لجمع المقاييس وإرسال التنبيهات.


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 في نفس الدليل لوصف التنبيهات. يصف هذا التنبيه حالة تأهب واحدة تتحقق مما إذا كان مصدر العقدة الخاص بنا على قيد الحياة.


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 في دليل alertmanager الذي نضيف فيه اتصالًا إلى بوت 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' 

قم بتشغيل صورتنا وتحقق من النتيجة:


 docker-compose up -d 

 docker-compose ps 

يجب أن تحصل على شيء مشابه لهذا:



كما نرى State for all Container Up ، إذا لم تبدأ إحدى الحاويات لسبب ما ، فيمكننا أن ننظر إلى السجل باستخدام الأمر:


 docker logs < > 

على سبيل المثال:


 docker logs docker logs project_alertmanager_1 

سوف تعطينا هذه النتيجة:



الآن إنشاء برنامج نصي test.sh للتحقق من الإخطارات


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 

بعد إطلاق أي منها ، يجب على الروبوت إرسال رسالة اختبار.
يمكننا أيضًا التحقق من تشغيل تنبيهنا الموصوف في con.yml ، لهذا نوقف Node Exporter باستخدام الأمر


 docker stop <  node exporter> 

بعد دقيقتين ، سيرسل إليك الروبوت إشعارًا بأن الخادم قد تعطل ، وابدأ Node Exporter باستخدام الأمر


 docker start <  node exporter> 

وبعد وقت معين ، سوف يستجيب الروبوت أن الخادم قد بدأ.


هذا كل شيء ، في المقالة التالية سوف أعلمك توصيل مقاييس إضافية وإنشاء إعلامات في Prometheus.

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


All Articles