التنبيهات والإشعارات: PagerDuty، Opsgenie
التنبيهات والإشعارات: PagerDuty، Opsgenie
1) لماذا منصة تنبيهات منفصلة
الهدف هو تقديم إشارة فورية وذات صلة إلى الشخص/الفريق المناسب وبدء عملية الحادث: التعرف (ack) والتصعيد والتواصل وتشريح الجثة. تقدم PagerDuty و Opsgenie:- التوجيه حسب الخدمات/العلامات/البيئات.
- التصعيد والجداول الزمنية (في الخدمة، متابعة الشمس).
- تفريغ الحدث/الارتباط.
- النوافذ الهادئة (الصيانة/التجميد) وقواعد الموسيقى.
- التكامل مع الرصد، CI/CD و ChatOps.
الدعم: عتبة SLO → تنبيه → الشخص/الآلة → كتيب التشغيل → التراجع/الإصلاح → بعد الوفاة.
2) نموذج الإشارة وشدتها
الجدول الموصى به:- (صفحة حرجة) - انتهاك SLO/خطأ مسار المال (الإيداع/السحب)، انخفاض في التوافر، معدل الحرق.
- high (page/ticket) - تدهور كبير دون انهيار واضح في SLO.
- متوسط (تذكرة) - السعة، تدهور الظهر، إعادة الدرج.
- منخفضة (معلومات) - الاتجاهات والتحذيرات.
القاعدة: صفحة بواسطة SLO أو محرك عمل صريح فقط.
3) هندسة التوجيه
1. المصدر (Prometheus/Alertmanager، Grafana، مراقبة السحابة، خطوط الويب الخاصة).
2. Шлюз (PagerDuty/Opsgenie service/integration).
3. السياسات: المسارات بالعلامات ('الخدمة'، 'env'، 'المنطقة')، الشدة، الحمولة.
4. التصعيد: تسلسل مستويات الواجب (L1→L2→menedzher).
5. الاتصالات: قنوات ChatOps، صفحات الحالة، الرسائل البريدية.
مثال على العلامات الرئيسية (توحيد)
"خدمة"، "env"، "منطقة"، "نسخة"، "runbook"، "release _ id'،" الطريق "،" المستأجر "(إذا كان B2B/متعدد المستأجرين).
4) جداول الاستدعاء والتصعيد
الجداول: الابتدائية/الثانوية، роли (SRE، DBRE، Sec).
التناوب: ليل نهار، متابعة الشمس، عطلة نهاية الأسبوع.
تجاوزات: إجازة/مرض.
التصعيد: مهلة التوقيت 5-10 دقائق → الطبقة التالية. من خلال ساعات العمل - إلى قسم الملفات الشخصية ؛ في الخارج - منصة تحت الطلب.
نصيحة: حافظ على خطوات تصعيد قصيرة في الليل (إجهاد أقل)، وأطول أثناء النهار (هناك سياق).
5) التكامل مع Alertmanager (النمط الأساسي)
yaml receivers:
- name: pagerduty pagerduty_configs:
- routing_key: ${PAGERDUTY_ROUTING_KEY}
severity: '{{ if eq. Labels. severity "critical" }}critical{{ else }}error{{ end }}'
class: '{{.Labels. service }}'
component: '{{.Labels. env }}'
group: '{{.Labels. region }}'
description: '{{.Annotations. summary }}'
details:
service: '{{.Labels. service }}'
env: '{{.Labels. env }}'
runbook: '{{.Annotations. runbook }}'
release: '{{.Annotations. release }}'
route:
receiver: pagerduty group_by: ["service","env","region"]
group_wait: 30s group_interval: 5m repeat_interval: 2h
Opsgenie (شبكة ويب)
yaml receivers:
- name: opsgenie opsgenie_configs:
- api_key: ${OPSGENIE_API_KEY}
responders:
- name: "SRE Primary"
type: team priority: '{{ if eq. Labels. severity "critical" }}P1{{ else }}P3{{ end }}'
details:
trace: '{{.Labels. trace_id }}'
runbook: '{{.Annotations. runbook }}'
6) الضوضاء والموت والارتباط
مفتاح Dedup: استخدم بصمة مستقرة (على سبيل المثال، الخدمة + الطريق + الرمز).
التجميع: «مجموعة _ حسب» حسب الخدمة/البيئة بحيث لا تفرز سلسلة 5xx عشرات الصفحات.
البكم/النوافذ الهادئة: أثناء الهجرات/الإطلاقات/اختبارات التحميل.
القمع لسبب ما: إذا كانت هناك بالفعل حادثة P1 لـ "api-gateway @ prod'، قمع P2/P3 الأطفال.
Anti-pattern: Page by CPU/Memory بدون تأثير مؤكد على SLO.
7) الارتباط بالإطلاقات والإجراءات الذاتية
مع اكتئاب الكناري، تتلقى PagerDuty/Opsgenie تنبيهًا من بوابة SLO → webhook في CI/CD → توقف/تراجع (Argo Rollouts/Helm).
يحتوي التنبيه على: «release _ id'،» image. ، والإشارة إلى خط الأنابيب ودفتر التراجع.
مثال على وصلة الدليل في الشروح
runbook: https://runbooks. company/rollback/api-gateway#canary
8) عمليات الدردشة والاتصالات
إنشاء قناة حوادث تلقائيًا في Slack/Teams، وربط التذكرة.
Slash- команды: «ack»، «assign @ user»، «status set'،» postmortem start'.
صفحة الحالة - التحديثات تلقائيًا على P1/P2.
9) دورة حياة الحادث (الحد الأدنى)
1. الزناد (تنبيه من SLO/أجهزة الاستشعار).
2. الصفحة (الابتدائية عند الطلب).
3. Ack (تأكيد، TTA).
4. الاتصال (القناة/الحالة).
5. التخفيف (التراجع/علم الميزة/العزل).
6. حل (TTR).
7. تشريح الجثة (الجدول الزمني، الأسباب، الإجراءات، الدروس، صاحب المهمة).
مجموعة الأدوار: IC (قائد الحادث)، قائد العمليات، Comms، Scribe.
10) حقول الحمولات (تطبيع)
json
{
"service": "payments-api",
"env": "prod",
"region": "eu-central-1",
"severity": "critical",
"event_class": "slo_burn",
"summary": "Withdraw 5xx > 0. 5% for 10m",
"runbook": "https://runbooks/payments/withdraw-5xx",
"release_id": "rel-2025-11-03-14-20",
"image": "ghcr. io/org/payments:1. 14. 2",
"trace_id": "8a4f0c2e9b1f42d7",
"annotations": { "canary": "25%" }
}
11) دمج مصادر الإشارة
Prometheus/Alertmanager هو المصدر الرئيسي لـ SLO/RED.
تنبيه Grafana أسهل للوحات القيادة/مقاييس الأعمال.
OpenTelemetry/SpanMetrics - الكمون/الخطأ حسب المسار.
الأحداث K8s - حالات فشل المجموعات (انتهاكات مستوى التحكم ومصرف التنمية الشعبي).
DB/قوائم الانتظار - تأخر/أقفال/تكرار.
خطافات التطبيق - إشارات المجال (خطأ PSP، زيادة الاحتيال).
12) السياسات والامتثال
المكتب الإقليمي لآسيا والمحيط الهادئ لإنشاء/تعديل السياسات والجداول الزمنية والموتاس.
مراجعة الحسابات: من اعترف/عين/غير الوضع، والطوابع الزمنية.
تقليل PII في الحمولات (معرف التذكرة بدلاً من بريد المستخدم الإلكتروني/الهاتف).
خطة DR: ماذا نفعل عندما تكون PagerDuty/Opsgenie غير متوفرة (قناة احتياطية).
13) دراسات حالة (PagerDuty vs Opsgenie)
14) نوافذ وصقيع هادئة
التجميد: حظر الاستدعاء في نوافذ الإطلاق المخطط لها، وترك P1 فقط.
تحفيظ العلامة: «env = stage»، «region = dr»، «service = batch».
كتم الصوت المؤقت: عند ترحيل قواعد البيانات/اختبارات التحميل - مع مالك صريح.
15) مقاييس الأداء (SRE/DORA للتنبيهات)
MTTA/MTTR (موزعة حسب الفرق/الخدمات/المناوبات).
النسبة المئوية للتنبيهات مع كتيب التشغيل (الهدف ≥ 95 في المائة).
حصة تنبيهات الصفحات من قبل SLO (الهدف ≥ 90٪).
نسبة المفيدة/الصاخبة (الهدف ≥ 3:1).
النسبة المئوية للإجراءات التلقائية (التوقف المؤقت/التراجع عبر الويب) - تنمو.
عناصر عمل ما بعد الوفاة المحروقة في 14/30 يومًا.
16) الأنماط المضادة
الصفحة حسب الأجهزة (وحدة المعالجة المركزية، القرص) دون التأثير على المستخدم.
غياب 'group _ by' → «عاصفة» التنبيهات.
لا توجد نوافذ هادئة - الإصدارات ترسم كل شيء باللون الأحمر.
الحمولات بدون «خدمة/env/runbook» - لا يمكن توجيهها/التصرف بناءً عليها.
لا يوجد مقياس وقواعد واحدة للشدة (كل مصدر مختلف).
تحذيرات «أبدية» من عدم إصلاح أحد (تنبيه الديون).
17) قائمة التنفيذ المرجعية (0-45 يوما)
0-10 أيام
مواءمة مقياس الشدة وتوحيد العلامات/الشروح.
قم بإنشاء خدمات في PagerDuty/Opsgenie، وقم بتكوين الجداول الزمنية والتصعيد الأساسي.
Bind Alertmanager/Grafana، مكّن «group _ by» و deadup.
11-25 يومًا
أدخل تنبيهات SLO (حرق متعدد النوافذ)، أضف دفتر تشغيل رابط.
اضبط ChatOps: قنوات تلقائية، أوامر ack/تعيين.
تمكين النوافذ الهادئة عند إطلاق/هجرات.
26-45 يومًا
دمج التوقف التلقائي/التراجع عن جزر الكناري (خطافات الويب).
أدخل تقارير MTTA/MTTR وتنبيه النظافة (تنظيف الضوضاء).
توحيد تشريح الجثة ومراقبة بنود العمل.
18) مقتطفات جاهزة
تنبيه Grafana → PagerDuty (رسم خرائط جسم JSON)
json
{
"routing_key": "${PAGERDUTY_ROUTING_KEY}",
"event_action": "trigger",
"payload": {
"summary": "{{.RuleName }}: {{ index. Labels \"service\" }}",
"severity": "{{ if eq (index. Labels \"severity\") \"critical\" }}critical{{ else }}error{{ end }}",
"source": "grafana",
"component": "{{ index. Labels \"env\" }}",
"group": "{{ index. Labels \"region\" }}"
},
"links": [
{ "href": "{{.DashboardURL }}", "text": "Dashboard" },
{ "href": "{{ index. Labels \"runbook\" }}", "text": "Runbook" }
]
}
Webhook من حالة التأهب → توقف Argo Rollouts مؤقتًا
bash curl -X POST "$ARGO_API/rollouts/pause" \
-H "Authorization: Bearer $TOKEN" \
-d '{"name":"api-gateway","namespace":"prod"}'
Opsgenie - قاعدة التوجيه (زائف)
yaml if:
tags: ["service:payments","env:prod"]
severity: ["P1","P2"]
then:
route_to: "SRE-Payments"
notify: ["Primary OnCall","Secondary"]
19)
محيط قوي للتنبيهات هو عملية + انضباط: الطبقات الموجهة SLO، التوجيه والتصعيد الكفء، العلامات والحمولات الموحدة، النوافذ الهادئة، ChatOps والإجراءات التلقائية (التوقف المؤقت/التراجع). اختر PagerDuty أو Opsgenie على الميزانية و UX، لكن التزم بنفس قواعد الضوضاء والواجب والمسؤولية - عندها ستكون الصفحة نادرة ودقيقة ومفيدة، وستكون الحوادث قصيرة ويمكن التحكم فيها.