انتقل إلى المحتوى الرئيسي

الفصل 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