مختبر: إعداد المراقبة
الهدف
تكوين نظام مراقبة شامل مع مقاييس، إنذارات، سجلات ولوحة معلومات.
الجزء 1: الإنذارات الأساسية
تمرين 1.1: إنذار وحدة المعالجة المركزية
قم بإنشاء إنذار يتفعّل عندما يتجاوز استخدام وحدة المعالجة المركزية 80% لمدة 10 دقائق:
# أكمل الأمر
aws cloudwatch put-metric-alarm \
--alarm-name _____ \
--metric-name _____ \
--namespace _____ \
--statistic _____ \
--period _____ \
--threshold _____ \
--comparison-operator _____ \
--evaluation-periods _____ \
--dimensions Name=InstanceId,Value=i-xxx \
--alarm-actions arn:aws:sns:...:alerts
💡 الحل
aws cloudwatch put-metric-alarm \
--alarm-name ec2-cpu-high \
--metric-name CPUUtilization \
--namespace AWS/EC2 \
--statistic Average \
--period 300 \
--threshold 80 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 2 \
--dimensions Name=InstanceId,Value=i-xxx \
--alarm-actions arn:aws:sns:us-east-1:123456789:alerts \
--alarm-description "CPU above 80% for 10 minutes"
توضيح:
- الفترة 300 ثانية × 2 تقييمات = 10 دقائق
- المتوسط لتجنب الإيجابيات الكاذبة من الذروات القصيرة
تمرين 1.2: إنذار القرص
قم بإنشاء إنذار للمساحة المنخفضة للقرص (> 85% مستخدم):
| المعلمة | القيمة |
|---|---|
| Metric Name | ? |
| Namespace | ? |
| Threshold | ? |
| Period | ? |
💡 الحل
| المعلمة | القيمة |
|---|---|
| Metric Name | disk_used_percent |
| Namespace | CWAgent |
| Threshold | 85 |
| Period | 3600 (1 ساعة) |
ملاحظة: هذه المقياس يتطلب تثبيت CloudWatch Agent على المثيل.
الجزء 2: تكوين السجلات
تمرين 2.1: مجموعة السجلات والاحتفاظ
# إنشاء مجموعة سجلات مع احتفاظ لمدة 30 يومًا
aws logs create-log-group \
--log-group-name /app/web-server
aws logs put-retention-policy \
--log-group-name /app/web-server \
--retention-in-days _____
💡 الحل
aws logs put-retention-policy \
--log-group-name /app/web-server \
--retention-in-days 30
القيم الممكنة: 1، 3، 5، 7، 14، 30، 60، 90، 120، 150، 180، 365، 400، 545، 731، 1096، 1827، 2192، 2557، 2922، 3288، 3653
تمرين 2.2: مرشح المقاييس
قم بإنشاء مرشح لعد الأخطاء 500 في السجلات:
aws logs put-metric-filter \
--log-group-name /app/web-server \
--filter-name error-500-count \
--filter-pattern '_______________' \
--metric-transformations \
metricName=Error500Count,\
metricNamespace=WebApp,\
metricValue=1
💡 الحل
aws logs put-metric-filter \
--log-group-name /app/web-server \
--filter-name error-500-count \
--filter-pattern '"HTTP/1.1" 500' \
--metric-transformations \
metricName=Error500Count,\
metricNamespace=WebApp,\
metricValue=1
# أو للسجلات بصيغة JSON
aws logs put-metric-filter \
--log-group-name /app/web-server \
--filter-name error-500-json \
--filter-pattern '{ $.statusCode = 500 }' \
--metric-transformations \
metricName=Error500Count,\
metricNamespace=WebApp,\
metricValue=1
الجزء 3: استعلامات Log Insights
تمرين 3.1: استعلامات التحليل
اكتب استعلامات Log Insights لـ:
أ. آخر 10 أخطاء:
# استعلامك هنا
ب. عدد الأخطاء لكل ساعة على مدار 24 ساعة:
# استعلامك هنا
ج. أفضل 5 صفحات بها خطأ 404:
# استعلامك هنا
💡 الحلول
أ. آخر 10 أخطاء:
fields @timestamp, @message
| filter @message like /ERROR|Exception|error/
| sort @timestamp desc
| limit 10
ب. عدد الأخطاء لكل ساعة على مدار 24 ساعة:
fields @timestamp, @message
| filter @message like /ERROR/
| stats count() as error_count by bin(1h)
| sort @timestamp desc
ج. أفضل 5 صفحات بها خطأ 404:
fields @timestamp, @message
| filter @message like /404/
| parse @message /GET (?<path>\/[^ ]*)/
| stats count() as hits by path
| sort hits desc
| limit 5
الجزء 4: لوحة المعلومات
تمرين 4.1: إنشاء لوحة معلومات
حدد الويدجتات للوحة معلومات الإنتاج:
| الويدجت | النوع | المقياس | الفترة |
|---|---|---|---|
| CPU Overview | ? | ? | ? |
| Memory Usage | ? | ? | ? |
| Request Count | ? | ? | ? |
| Error Rate | ? | ? | ? |
| Latency P99 | ? | ? | ? |
| Alarm Status | ? | ? | ? |
💡 الحل
| الويدجت | النوع | المقياس | الفترة |
|---|---|---|---|
| CPU Overview | Line | CPUUtilization | 5 min |
| Memory Usage | Line | mem_used_percent | 5 min |
| Request Count | Stacked Area | RequestCount | 1 min |
| Error Rate | Number | HTTPCode_5XX / Total × 100 | 5 min |
| Latency P99 | Line | TargetResponseTime p99 | 1 min |
| Alarm Status | Alarm Status | جميع الإنذارات | - |
تمرين 4.2: JSON لوحة المعلومات
{
"widgets": [
{
"type": "metric",
"properties": {
"title": "CPU Utilization",
"metrics": [
["AWS/EC2", "CPUUtilization", "InstanceId", "i-xxx"]
],
"period": 300,
"stat": "Average",
"region": "us-east-1"
}
},
{
"type": "___",
"properties": {
"title": "Alarm Status",
"alarms": [
"arn:aws:cloudwatch:...:alarm:cpu-high",
"arn:aws:cloudwatch:...:alarm:mem-high"
]
}
}
]
}
💡 الحل
{
"widgets": [
{
"type": "metric",
"x": 0, "y": 0, "width": 12, "height": 6,
"properties": {
"title": "CPU Utilization",
"metrics": [
["AWS/EC2", "CPUUtilization", "InstanceId", "i-xxx"]
],
"period": 300,
"stat": "Average",
"region": "us-east-1",
"view": "timeSeries"
}
},
{
"type": "alarm",
"x": 12, "y": 0, "width": 12, "height": 6,
"properties": {
"title": "Alarm Status",
"alarms": [
"arn:aws:cloudwatch:us-east-1:123456789:alarm:cpu-high",
"arn:aws:cloudwatch:us-east-1:123456789:alarm:mem-high"
]
}
}
]
}
الجزء 5: دليل التشغيل
تمرين 5.1: إنشاء دليل تشغيل
أكمل دليل التشغيل لحادث "الذاكرة العالية":
┌─────────────────────────────────────────────────────────────┐
│ RUNBOOK : الذاكرة العالية (> 90%) │
├─────────────────────────────────────────────────────────────┤
│ │
│ التقييم الأولي (2 دقيقة كحد أقصى) │
│ ☐ _______________________________________ │
│ ☐ _______________________________________ │
│ │
│ التشخيص (5 دقائق كحد أقصى) │
│ ☐ _______________________________________ │
│ ☐ _______________________________________ │
│ ☐ _______________________________________ │
│ │
│ إجراءات العلاج │
│ ☐ _______________________________________ │
│ ☐ _______________________________________ │
│ │
│ التحقق │
│ ☐ _______________________________________ │
│ ☐ _______________________________________ │
│ │
└─────────────────────────────────────────────────────────────┘
💡 الحل
┌─────────────────────────────────────────────────────────────┐
│ RUNBOOK : الذاكرة العالية (> 90%) │
├─────────────────────────────────────────────────────────────┤
│ │
│ التقييم الأولي (2 دقيقة كحد أقصى) │
│ ☐ تحقق مما إذا كانت عدة مثيلات متأثرة │
│ ☐ تحقق من أخطاء المستخدم (502، مهلات) │
│ │
│ التشخيص (5 دقائق كحد أقصى) │
│ ☐ اتصال SSH: free -h، top -o %MEM │
│ ☐ تحديد العملية المستهلكة للذاكرة │
│ ☐ تحقق من سجلات التطبيقات لتسريبات الذاكرة │
│ │
│ إجراءات العلاج │
│ ☐ إذا كانت هناك تسريب للذاكرة: أعد تشغيل التطبيق │
│ ☐ إذا كانت الحمولة مشروعة: قم بالتوسع (إضافة مثيلات) │
│ ☐ تحرير الذاكرة المؤقتة إذا أمكن (drop_caches) │
│ │
│ التحقق │
│ ☐ هل عادت الذاكرة إلى أقل من 80%؟ │
│ ☐ هل يعمل التطبيق بشكل طبيعي؟ │
│ ☐ إنشاء تذكرة لتحليل ما بعد الوفاة │
│ │
└─────────────────────────────────────────────────────────────┘
الجزء 6: سيناريو كامل
السياق
تتلقى تنبيهًا: "معدل الخطأ فوق 5% لتطبيق الويب"
الأسئلة
- ما هي المقاييس التي تتحقق منها أولاً؟
- ما هي السجلات التي تحللها؟
- ما هو استعلام Log Insights الذي تستخدمه؟
- كيف تحدد السبب الجذري؟
💡 الحل التفصيلي
1. المقاييس التي يجب التحقق منها:
- HTTPCode_Target_5XX (ALB) → تأكيد الأخطاء 500
- RequestCount → حجم الحركة
- TargetResponseTime → زمن الاستجابة
- HealthyHostCount → هل هناك مثيلات معطلة؟
- CPUUtilization، Memory → هل الموارد مشبعة؟
2. السجلات التي يجب تحليلها:
- /aws/elasticloadbalancing/ → سجلات ALB
- /app/web-server → سجلات التطبيقات
- /var/log/messages → سجلات النظام
3. استعلام Log Insights:
fields @timestamp, @message
| filter @message like /500|ERROR|Exception/
| stats count() by bin(5m)
| sort @timestamp desc
ثم للتفصيل:
fields @timestamp, @message
| filter @message like /500/
| parse @message /(?<endpoint>\/api\/[^ ]*)/
| stats count() by endpoint
| sort count desc
| limit 10
4. عملية التحديد:
- ربط توقيت ذروة الأخطاء مع عمليات النشر
- تحديد نقطة النهاية المشكلة
- التحقق من سجلات نقطة النهاية المحددة
- البحث عن تتبع الخطأ
- تحديد السبب (مهلة قاعدة البيانات، خطأ في الكود، التكوين...)
التسليم
الوثيقة المطلوب إنتاجها
- تكوين الإنذارات (أوامر CLI)
- استعلامات Log Insights (3 على الأقل)
- تعريف لوحة المعلومات (JSON أو وصف)
- دليل تشغيل كامل لسيناريوهين
- تحليل السيناريو مع الحل
معايير التقييم
| المعيار | النقاط |
|---|---|
| الإنذارات مكونة بشكل صحيح | /20 |
| استعلامات Log Insights | /20 |
| لوحة المعلومات ذات صلة | /20 |
| أدلة التشغيل كاملة | /25 |
| تحليل السيناريو | /15 |
| المجموع | /100 |
الأسبوع القادم: MODULE 14 - FinOps