چندوقتی بود که از پرومتئوس و گرافانا برای مانیتور کردن سرورهای بیگ بلو باتن به صورت Visual یا "بصری" استفاده میکردم، و خب بعد از یه مدت وقت مانیتور کردن به صورت "بصری" رو نداشتم و به فکر راه اندازی AlertManager افتادم، که مثلا هرموقع دیسک سرورها پر شد، یک ایمیل دریافت کنم.
توی این آموزش فرض میکنیم که شما از قبل سرور Prometheus داکری رو راهاندازی کردین و همچنین دانش نوشتن Expression های پرومتئوسی رو دارین.
من توی این آموزش سراغ مانیتور کردن up یا down بودن سرورها رفتم، اول Expression مورد نظرمون رو مینویسیم و تست میگیریم:
اینجا مقدار up اگه برای هر exporter صفر بشه، یعنی سرور یا خاموشه یا exporter خراب شده که در هر دو صورت باید به مشکل رسیدگی بشه.
پس شرط مورد نظر ما اینطوری میشه:
up == 0
یعنی اگر مقدار up برابر صفر شد برای ما نوتیفیکیشن بفرست.
حالا که شرط رو به دست آوردیم داخل فولدر کانفیگ های پرومتئوس یک فایل جدید درست میکنیم که شرط هامون رو داخلش قرار بدیم، توی سناریوی من اسم این فایل rules.yml هست، داخل این فایل کانفیگ زیر رو میزنیم:
groups: - name: AllInstances rules: - alert: InstanceUptime # Condition for alerting expr: up == 0 for: 1m # Annotation - additional informational labels to store more information annotations: title: 'Instance {{ $labels.instance }} is down!!' description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for 1 minute!' # Labels - additional labels to be attached to the alert labels: severity: 'critical'
همونطور که میبینید داخل این فایل بخش expr شرط خودم رو نوشتم.
حالا داخل فایل docker-compose.yml خطوط زیر رو اضافه میکنیم:
version: '3.2' services: ... alertmanager: container_name: alertmanager image: prom/alertmanager:v0.23.0 restart: unless-stopped ports: - "9093:9093" volumes: - "./alertmanager:/config" - alertmanager-data:/data command: --config.file=/config/alertmanager.yml --log.level=debug volumes: alertmanager-data:
و داخل تنظیمات مربوط به پرومتئوس، خط زیر رو اضافه میکنیم که فایل شرط های ما داخل کانتینر داکر هم لینک بشه:
داخل فایل prometheus.yml هم کانفیگ های زیر رو اضافه میکنیم که بین AlertManager و پرومتئوس ارتباط برقرار بشه:
rule_files: - ./rules.yml alerting: alertmanagers: - scheme: http static_configs: - targets: [ '127.0.0.1:9093' ]
حالا کنار فایل prometheus.yml و rules.yml یک فولدر جدید به اسم alertmanager میسازیم:
و داخل این فولدر یک فایل جدید به اسم alertmanager.yml اضافه میکنیم و کانفیگ های زیر رو داخلش میریزیم: (داخل بخش receivers، از SMTP های جیمیل استفاده کردیم، براساس اطلاعات جیمیل خودتون این بخش رو تکمیل کنین)
route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'mail' receivers: - name: 'mail' email_configs: - smarthost: 'smtp.gmail.com:587' auth_username: 'YOUR_GMAIL@gmail.com' auth_identity: 'YOUR_GMAIL@gmail.com' auth_password: "GMAIL_PASSWORD" from: 'YOUR_GMAIL@gmail.com' to: 'receiver1@yahoo.com, receiver2@yahoo.com' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
تا اینجا ما AlertManager رو نصب کردیم، شرطهامون رو هم نوشتیم، AlertManager رو به پرومتئوس وصل کردیم و تنظیمات جیمیل خودمون رو هم وارد کردیم.
حالا با دستور
docker-compose up -d
کانتینرهای داکری خودمون رو اجرا میکنیم، داخل مسیر
http://prometheus:9091/new/alerts
باید شرط های خودمون رو ببینیم، اگه instance ای از پرومئوس خاموش بشه و وضعیت up اون به صفر تبدیل بشه و این شرایط برای یک دقیقه ثابت باشه، AlertManager به شما ایمیل میزنه و وضعیت رو بهتون اطلاع رسانی میکنه. D:
اگه میخوای از تلگرام استفاده کنی و نوتیفیکیشن ها رو داخل تلگرام دریافت کنی به این لینک یه سری بزن:
https://prometheus.io/docs/alerting/latest/configuration/#webhook_config