کانفیگ پرومتئوس Prometheus راه اندازی AlertManager روی داکر

چندوقتی بود که از پرومتئوس و گرافانا برای مانیتور کردن سرورهای بیگ بلو باتن به صورت 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:
      - &quot9093:9093&quot
    volumes:
      - &quot./alertmanager:/config&quot
      - 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: &quotGMAIL_PASSWORD&quot
        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

https://prometheus.io/docs/alerting/latest/configuration/#webhook_config