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

مختبر: إعداد المراقبة

الهدف​

تكوين نظام مراقبة شامل مع مقاييس، إنذارات، سجلات ولوحة معلومات.

الجزء 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 Namedisk_used_percent
NamespaceCWAgent
Threshold85
Period3600 (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 OverviewLineCPUUtilization5 min
Memory UsageLinemem_used_percent5 min
Request CountStacked AreaRequestCount1 min
Error RateNumberHTTPCode_5XX / Total × 1005 min
Latency P99LineTargetResponseTime p991 min
Alarm StatusAlarm 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% لتطبيق الويب"

الأسئلة​

  1. ما هي المقاييس التي تتحقق منها أولاً؟
  2. ما هي السجلات التي تحللها؟
  3. ما هو استعلام Log Insights الذي تستخدمه؟
  4. كيف تحدد السبب الجذري؟
💡 الحل التفصيلي

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. عملية التحديد:

  1. ربط توقيت ذروة الأخطاء مع عمليات النشر
  2. تحديد نقطة النهاية المشكلة
  3. التحقق من سجلات نقطة النهاية المحددة
  4. البحث عن تتبع الخطأ
  5. تحديد السبب (مهلة قاعدة البيانات، خطأ في الكود، التكوين...)

التسليم​

الوثيقة المطلوب إنتاجها​

  1. تكوين الإنذارات (أوامر CLI)
  2. استعلامات Log Insights (3 على الأقل)
  3. تعريف لوحة المعلومات (JSON أو وصف)
  4. دليل تشغيل كامل لسيناريوهين
  5. تحليل السيناريو مع الحل

معايير التقييم​

المعيارالنقاط
الإنذارات مكونة بشكل صحيح/20
استعلامات Log Insights/20
لوحة المعلومات ذات صلة/20
أدلة التشغيل كاملة/25
تحليل السيناريو/15
المجموع/100

الأسبوع القادم: MODULE 14 - FinOps