الفصل 11.3 - التنبيه
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- فهم نظام التنبيه Prometheus
- تكوين Alertmanager
- إنشاء قواعد التنبيه
- إدارة الإشعارات (البريد الإلكتروني، Slack، PagerDuty)
- تكوين التجميع والتوجيه
- تنفيذ الصمت والتثبيط
مقدمة
يسمح التنبيه بإخطار الفرق عند اكتشاف مشاكل في العنقود أو التطبيقات.
بنية التنبيه
Prometheus
- جمع المقاييس
- تقييم قواعد التنبيه
- إرسال التنبيهات إلى Alertmanager
Alertmanager
- استقبال التنبيهات من Prometheus
- تجميع وتوجيه التنبيهات
- إرسال الإشعارات
تثبيت Alertmanager
عبر kube-prometheus-stack
يتم تضمين Alertmanager في kube-prometheus-stack.
التحقق
# عرض الـ Pods
kubectl get pods -n monitoring | grep alertmanager
# الوصول إلى Alertmanager
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-alertmanager 9093:9093
إنشاء قواعد التنبيه
PrometheusRule
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: kubernetes-alerts
namespace: monitoring
spec:
groups:
- name: kubernetes.rules
rules:
# Pod CrashLooping
- alert: PodCrashLooping
expr: rate(kube_pod_container_status_restarts_total[15m]) > 0
for: 5m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.pod }} is crash looping"
description: "Pod {{ $labels.pod }} in namespace {{ $labels.namespace }} has restarted {{ $value }} times in the last 15 minutes"
# High CPU Usage
- alert: HighCPUUsage
expr: 100 - (avg(rate(container_cpu_usage_seconds_total[5m])) * 100) < 10
for: 5m
labels:
severity: critical
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is above 90% on {{ $labels.instance }}"
# High Memory Usage
- alert: HighMemoryUsage
expr: (container_memory_usage_bytes / container_spec_memory_limit_bytes) * 100 > 90
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.pod }}"
description: "Memory usage is above 90% on pod {{ $labels.pod }}"
تكوين Alertmanager
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: alertmanager-config
namespace: monitoring
data:
alertmanager.yml: |
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'default'
routes:
- match:
severity: critical
receiver: 'critical-alerts'
- match:
severity: warning
receiver: 'warning-alerts'
receivers:
- name: 'default'
email_configs:
- to: 'team@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alertmanager@example.com'
auth_password: 'password'
- name: 'critical-alerts'
slack_configs:
- api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'
channel: '#alerts-critical'
title: '{{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
- name: 'warning-alerts'
email_configs:
- to: 'team@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
الإشعارات
البريد الإلكتروني
receivers:
- name: 'email'
email_configs:
- to: 'admin@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'user'
auth_password: 'password'
headers:
Subject: 'Alert: {{ .GroupLabels.alertname }}'
Slack
receivers:
- name: 'slack'
slack_configs:
- api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'
channel: '#alerts'
title: '{{ .GroupLabels.alertname }}'
text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
PagerDuty
receivers:
- name: 'pagerduty'
pagerduty_configs:
- service_key: 'YOUR_SERVICE_KEY'
description: '{{ .GroupLabels.alertname }}'
التجميع والتوجيه
التجميع
يتم تجميع التنبيهات المتشابهة معًا:
route:
group_by: ['alertname', 'cluster']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
التوجيه
توجيه التنبيهات وفقًا للتسميات:
route:
routes:
- match:
severity: critical
receiver: 'critical-team'
- match:
severity: warning
receiver: 'warning-team'
الصمت والتثبيط
الصمت
إزالة التنبيهات مؤقتًا:
# عبر واجهة Alertmanager
# أو عبر amtool
amtool silence add alertname=HighCPUUsage --duration=1h
التثبيط
إزالة التنبيهات الأقل أهمية عندما تكون هناك تنبيه حرج نشط:
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']
أفضل الممارسات
1. قواعد مناسبة
إنشاء قواعد للمشاكل الحقيقية والقابلة للتنفيذ.
2. عتبات واقعية
تحديد عتبات تثير تنبيهات ذات معنى.
3. التجميع
تجميع التنبيهات لتجنب البريد العشوائي.
4. التصعيد
تكوين التصعيد للتنبيهات الحرجة.
5. التوثيق
توثيق كل قاعدة تنبيه.
ملخص
في هذا الفصل، تعلمت:
التنبيه: نظام إشعار للمشاكل
PrometheusRule: يحدد قواعد التنبيه
Alertmanager: يدير التوجيه والإشعارات
الإشعارات: البريد الإلكتروني، Slack، PagerDuty
التجميع: يجمع التنبيهات المتشابهة
التوجيه: يوجه وفقًا للتسميات
الصمت/التثبيط: يدير التنبيهات مؤقتًا
أفضل الممارسات: قواعد مناسبة، عتبات واقعية، التجميع
الخطوات التالية
الوحدة 12: النشر في الإنتاج
المختبر 11.4: التنبيه والإشعارات
تم إنشاء الفصل في: ديسمبر 2024