مقدمه
Alertmanager مؤلفهای در اکوسیستم Prometheus است که routing هشدار، گروهبندی، silence کردن و ارسال اعلان را مدیریت میکند. بدون پیکربندی مناسب، یا با طوفان هشدار (هزاران اعلان تکراری) مواجه میشوید یا هشدارهای حیاتی را از دست میدهید. این راهنما نحوه طراحی قوانین routing هشدار را برای زیرساخت واقعی آموزش میدهد.
پیپلاین هشدار
وقتی Prometheus یک قانون هشداردهی را ارزیابی میکند و آن را در حال fire میبیند، هشدار را به Alertmanager ارسال میکند:
۱. گروهبندی هشدارهای مشابه
۲. Routing هشدار به receiver مناسب
۳. Deduplication هشدارهای تکراری
۴. Silence هشدارها در پنجرههای تعمیراتی
۵. Inhibition هشدارها هنگامی که هشدارهای با اولویت بالاتر در حال fire هستند
پیکربندی پایه Alertmanager
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.gmail.com:587'
smtp_from: 'alerts@company.com'
route:
receiver: 'team-ops-email'
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- match:
severity: critical
receiver: 'pagerduty-critical'
group_wait: 10s
- match_re:
alertname: '(MySQL|Postgres).*'
receiver: 'team-dba-slack'Inhibition Rules
inhibit_rules:
# اگر node down است، هشدارهای دیگر همان node را suppress کن
- source_match:
alertname: NodeDown
target_match_re:
alertname: '.*'
equal: ['instance']
# اگر دیسک پر است، هشدار استفاده بالا را suppress کن
- source_match:
alertname: DiskFull
target_match:
alertname: DiskUsageHigh
equal: ['instance', 'mountpoint']تست پیکربندی
# اعتبارسنجی فایل config
alertmanager --config.file=alertmanager.yml --check-config
# ارسال هشدار تست
curl -X POST http://localhost:9093/api/v2/alerts -H 'Content-Type: application/json' -d '[{"labels":{"alertname":"Test","severity":"critical"}}]'
# ایجاد silence برای تعمیرات
amtool silence add --author="ops" --duration=2h alertname="NodeDown" instance="web-01.company.com"پیکربندی صحیح Alertmanager تفاوت میان تیمی است که به حوادث واقعی پاسخ میدهد و تیمی که در سیل اعلان غرق شده است. از routing ساده شروع کنید، inhibition برای کاهش تکرار اضافه کنید، و routing زمانمحور برای احترام به ساعت کاری تیمتان استفاده کنید.
