التنبيهات والإشعارات في CloudWatch
مقدمة
تراقب التنبيهات في CloudWatch مقاييسك وتطلق إجراءات تلقائية عندما يتم الوصول إلى العتبات المحددة. إنها مكون أساسي للمراقبة والقدرة على الاستجابة التشغيلية.
بنية التنبيهات
┌─────────────────────────────────────────────────────────────────┐
│ تدفق التنبيهات │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐ │
│ │ مقياس │────►│ تنبيه │────►│ إجراءات │ │
│ │ │ │ │ │ │ │
│ │ CPU 85% │ │ عتبة>80% │ │ • SNS (بريد إلكتروني/SMS) │ │
│ └──────────┘ └──────────┘ │ • Auto Scaling │ │
│ │ • Lambda │ │
│ │ • EC2 (إيقاف/إعادة تشغيل) │ │
│ └──────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
حالات التنبيه
┌─────────────────────────────────────────────────────────────────┐
│ حالات التنبيه │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ │
│ │ OK │ المقياس ضمن الحدود الطبيعية │
│ │ (أخضر) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ تجاوز العتبة │
│ ┌─────────────────┐ │
│ │ ALARM │ تم الوصول إلى العتبة → تم تفعيل الإجراءات │
│ │ (أحمر) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ بيانات مفقودة │
│ ┌─────────────────┐ │
│ │ INSUFFICIENT │ لا توجد بيانات كافية للتقييم │
│ │ DATA │ │
│ │ (رمادي) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
إعداد التنبيه
عناصر الإعداد
┌─────────────────────────────────────────────────────────────────┐
│ تشريح التنبيه │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. المقياس │
│ └── أي مقياس يجب مراقبته؟ │
│ مثال: CPUUtilization, NetworkIn, Errors │
│ │
│ 2. الإحصاء │
│ └── كيف يتم تجميع البيانات؟ │
│ Average, Sum, Minimum, Maximum, SampleCount │
│ │
│ 3. الفترة │
│ └── نافذة الوقت لكل نقطة │
│ 60s, 300s (5min), 3600s (1h) │
│ │
│ 4. العتبة │
│ └── ما هي القيمة التي تطلق التنبيه؟ │
│ > 80%, < 10, >= 1000 │
│ │
│ 5. فترات التقييم │
│ └── كم عدد الفترات في الانتهاك؟ │
│ "3 من 5 فترات" (لتجنب الإيجابيات الكاذبة) │
│ │
│ 6. الإجراءات │
│ └── ماذا تفعل عندما يتم تفعيل التنبيه؟ │
│ Notification, Auto Scaling, etc. │
│ │
└─────────────────────────────────────────────────────────────────┘
مثال: تنبيه CPU لـ EC2
# Pseudo-configuration CloudFormation
HighCPUAlarm:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmName: "EC2-HighCPU-Production"
AlarmDescription: "CPU superieur a 80% pendant 5 minutes"
# Metrique
Namespace: "AWS/EC2"
MetricName: "CPUUtilization"
Dimensions:
- Name: InstanceId
Value: "i-1234567890abcdef0"
# Evaluation
Statistic: "Average"
Period: 60 # 1 minute
EvaluationPeriods: 5 # 5 periodes
DatapointsToAlarm: 3 # 3 sur 5 en violation
# Seuil
ComparisonOperator: "GreaterThanThreshold"
Threshold: 80
# Actions
AlarmActions:
- "arn:aws:sns:us-east-1:123456789:AlerteOps"
OKActions:
- "arn:aws:sns:us-east-1:123456789:AlerteOps"
أنواع التنبيهات الشائعة
1. تنبيهات الأداء
| الخدمة | المقياس | العتبة النموذجية | السبب |
|---|---|---|---|
| EC2 | CPUUtilization | > 80% | زيادة الحمل |
| EC2 | StatusCheckFailed | > 0 | فشل المثيل |
| RDS | DatabaseConnections | > 80% max | تشبع |
| ELB | TargetResponseTime | > 2s | تأخير |
| Lambda | Duration | > 80% timeout | خطر انتهاء المهلة |
2. تنبيهات الأخطاء
| الخدمة | المقياس | العتبة النموذجية | السبب |
|---|---|---|---|
| Lambda | Errors | > 1% | معدل الخطأ |
| ALB | HTTPCode_Target_5XX | > 10 | أخطاء الخادم |
| API Gateway | 4XXError | > 5% | أخطاء العميل |
| SQS | ApproximateNumberOfMessagesVisible | > 1000 | قائمة مشبعة |
3. تنبيهات التكاليف
| المقياس | العتبة | الإجراء |
|---|---|---|
| EstimatedCharges | > Budget | Notification |
| EC2 Running Hours | > Prevu | Investigation |
التنبيهات المركبة
┌─────────────────────────────────────────────────────────────────┐
│ التنبيه المركب │
├─────────────────────────────────────────────────────────────────┤
│ │
│ دمج عدة تنبيهات مع منطق AND/OR/NOT │
│ │
│ مثال: تنبيه حرج فقط إذا: │
│ - CPU > 80% و │
│ - الذاكرة > 90% و │
│ - ليس في الصيانة │
│ │
│ ┌────────────┐ │
│ │ CPU > 80% │───┐ │
│ └────────────┘ │ │
│ │ AND │
│ ┌────────────┐ ├────────► التنبيه المركب │
│ │ Mem > 90% │───┤ │ │
│ └────────────┘ │ ▼ │
│ │ إجراءات حرجة │
│ ┌────────────┐ │ │
│ │NOT Maint. │───┘ │
│ └────────────┘ │
│ │
│ الفائدة: يقلل من الإيجابيات الكاذبة │
│ │
└─────────────────────────────────────────────────────────────────┘
الإجراءات التلقائية
SNS (الإشعارات)
┌─────────────────────────────────────────────────────────────────┐
│ إشعارات SNS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ تنبيه ────► SNS Topic ────► المشتركين │
│ │ │
│ ├──► بريد إلكتروني (equipe-ops@company.com) │
│ ├──► SMS (+1-555-123-4567) │
│ ├──► Slack (webhook) │
│ ├──► PagerDuty (integration) │
│ └──► Lambda (automatisation) │
│ │
└─────────────────────────────────────────────────────────────────┘
Auto Scaling
تنبيه CPU > 80% ────► إجراء: توسيع (+2 مثيلات)
تنبيه CPU < 30% ────► إجراء: تقليص (-1 مثيل)
إجراءات EC2
تنبيه فشل StatusCheck ────► إجراء: استعادة المثيل
تنبيه مثيل خامل ────► إجراء: إيقاف المثيل
أفضل الممارسات
1. تجنب الإيجابيات الكاذبة
# سيء: تنبيه حساس جداً
Period: 60
EvaluationPeriods: 1
DatapointsToAlarm: 1
# → يتم التفعيل عند أي قمة
# جيد: تنبيه مع تحمل
Period: 60
EvaluationPeriods: 5
DatapointsToAlarm: 3
# → 3 انتهاكات خلال 5 دقائق = مشكلة حقيقية
2. تسمية واضحة
التنسيق الموصى به:
[البيئة]-[الخدمة]-[المقياس]-[الخطورة]
أمثلة:
• PROD-EC2-HighCPU-Critical
• PROD-Lambda-Errors-Warning
• DEV-RDS-Connections-Info
3. توثيق التنبيهات
يجب أن يحتوي كل تنبيه على:
• وصف واضح
• دليل تشغيل مرتبط (ماذا تفعل عند التفعيل)
• المالك (من هو المسؤول)
• تاريخ التفعيل
مثال على إعداد كامل
مراقبة تطبيق ويب
┌─────────────────────────────────────────────────────────────────┐
│ التنبيهات لتطبيق ويب │
├─────────────────────────────────────────────────────────────────┤
│ │
│ طبقة العرض (ALB) │
│ ├── ALB-HighLatency (ResponseTime > 2s) │
│ ├── ALB-High5XX (5XX > 10/min) │
│ └── ALB-UnhealthyHosts (> 0) │
│ │
│ طبقة التطبيق (EC2/Lambda) │
│ ├── EC2-HighCPU (> 80%) │
│ ├── EC2-HighMemory (> 85%) │
│ ├── Lambda-HighErrors (> 1%) │
│ └── Lambda-NearTimeout (> 80% timeout) │
│ │
│ طبقة البيانات (RDS) │
│ ├── RDS-HighCPU (> 80%) │
│ ├── RDS-LowStorage (< 20%) │
│ ├── RDS-HighConnections (> 80% max) │
│ └── RDS-ReplicaLag (> 60s) │
│ │
│ التكاليف │
│ └── Billing-OverBudget (> budget mensuel) │
│ │
└─────────────────────────────────────────────────────────────────┘
تمرين: إنشاء خطة تنبيهات
لتطبيق تجارة إلكترونية، حدد التنبيهات لـ:
- التوافر: التطبيق متاح
- الأداء: وقت استجابة مقبول
- الأخطاء: معدل خطأ منخفض
- السعة: موارد كافية
عرض الحل
| الفئة | التنبيه | المقياس | العتبة | الإجراء |
|---|---|---|---|---|
| التوافر | ALB-NoHealthyTargets | HealthyHostCount | = 0 | PagerDuty Critical |
| التوافر | Route53-HealthCheck | HealthCheckStatus | Failed | SNS + Failover |
| الأداء | ALB-HighLatency | TargetResponseTime | > 3s | SNS Warning |
| الأداء | Lambda-SlowExecution | Duration | > 10s | SNS Warning |
| الأخطاء | ALB-High5XX | HTTPCode_Target_5XX | > 50/5min | SNS Critical |
| الأخطاء | Lambda-HighErrors | Errors | > 5% | SNS Critical |
| السعة | EC2-HighCPU | CPUUtilization | > 80% | Auto Scaling |
| السعة | RDS-LowStorage | FreeStorageSpace | < 10GB | SNS Warning |
ملخص
- تراقب التنبيهات المقاييس وتطلق الإجراءات
- 3 حالات: OK، ALARM، INSUFFICIENT_DATA
- قم بإعداد فترات التقييم لتجنب الإيجابيات الكاذبة
- استخدم التنبيهات المركبة للظروف المعقدة
- وثق كل تنبيه بدليل تشغيل
القسم التالي: اختبار التحقق