Update postmortem-report.md
هذا الالتزام موجود في:
@@ -0,0 +1,106 @@
|
|||||||
|
1. اكتب تقرير Postmortem (ملخص + timeline + root cause + توصيات)
|
||||||
|
- الملخص : تطبيق على غيمة تعطّل 45 دقيقة بسبب OOMKilled متكرر.
|
||||||
|
**التاثير :
|
||||||
|
التطبيق أصبح غير متاح للمستخدمين لمدة 45 دقيقة.
|
||||||
|
جميع الطلبات (Requests) فشلت أثناء فترة الانقطاع.
|
||||||
|
أثر ذلك على تجربة المستخدم وتوفر الخدمة (Service Availability).
|
||||||
|
** الحل :
|
||||||
|
تم إعادة تشغيل الـ Pods، وزيادة حدود الذاكرة (Memory Limits)، وتحسين إعدادات الـ Kubernetes لمنع تكرار المشكلة.
|
||||||
|
- root cause :
|
||||||
|
السبب الرئيسي
|
||||||
|
|
||||||
|
الـ Application استهلك ذاكرة أكبر من الحد المحدد داخل الـ Kubernetes.
|
||||||
|
|
||||||
|
عندما تجاوز الاستهلاك الـ Memory Limit قام Linux Kernel بتفعيل OOM Killer، فقام Kubernetes بإنهاء الـ Container وإعادة تشغيله.
|
||||||
|
|
||||||
|
وبسبب استمرار الحمل المرتفع تكرر نفس السيناريو عدة مرات، مما أدى إلى انقطاع الخدمة.
|
||||||
|
|
||||||
|
العوامل المساعدة
|
||||||
|
Memory Limits منخفضة.
|
||||||
|
عدم وجود Horizontal Pod Autoscaler.
|
||||||
|
عدم وجود مراقبة استباقية لاستهلاك الذاكرة.
|
||||||
|
عدم وجود Alerts قبل الوصول للحد الأقصى.
|
||||||
|
الحمل المفاجئ لم يكن متوقعًا.
|
||||||
|
- timeline :
|
||||||
|
Time Event
|
||||||
|
10:00 AM زيادة مفاجئة في عدد المستخدمين والطلبات.
|
||||||
|
10:05 AM استهلاك الذاكرة بدأ يقترب من الحد الأقصى.
|
||||||
|
10:10 AM أول Pod تعرض لـ OOMKilled.
|
||||||
|
10:15 AM Kubernetes أعاد تشغيل الـ Pod ولكن المشكلة استمرت.
|
||||||
|
10:20 AM عدة Pods دخلت في CrashLoop بسبب تكرار OOMKilled.
|
||||||
|
10:25 AM المستخدمون بدأوا يواجهون أخطاء وعدم استجابة التطبيق.
|
||||||
|
10:35 AM فريق التشغيل بدأ التحقيق في المشكلة.
|
||||||
|
10:45 AM زيادة Memory Limits وتشغيل Pods جديدة.
|
||||||
|
10:45–10:50 AM الخدمة عادت للعمل بصورة طبيعية.
|
||||||
|
|
||||||
|
-توصيات :
|
||||||
|
**Short-term :
|
||||||
|
زيادة Memory Limits.
|
||||||
|
مراجعة Memory Requests.
|
||||||
|
إعادة تشغيل Pods المتأثرة.
|
||||||
|
مراجعة Logs للتأكد من عدم وجود Memory Leak.
|
||||||
|
**Long-term :
|
||||||
|
تفعيل Horizontal Pod Autoscaler (HPA).
|
||||||
|
استخدام Cluster Autoscaler إذا امتلأت الـ Nodes.
|
||||||
|
إضافة Prometheus وGrafana للمراقبة.
|
||||||
|
إنشاء Alerts عند وصول استهلاك الذاكرة إلى 80%.
|
||||||
|
إجراء Load Testing قبل نشر الإصدارات الجديدة.
|
||||||
|
تحسين كفاءة التطبيق وتقليل استهلاك الذاكرة.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
2. صمم سياسة auto-scaling لمنصة غيمة تمنع التكرار :
|
||||||
|
لمنع تكرار المشكلة يتم استخدام Horizontal Pod Autoscaler (HPA).
|
||||||
|
|
||||||
|
السياسة المقترحة
|
||||||
|
Minimum Replicas: 2
|
||||||
|
Maximum Replicas: 10
|
||||||
|
Target CPU Utilization: 70%
|
||||||
|
Target Memory Utilization: 75%
|
||||||
|
|
||||||
|
عند زيادة الحمل يقوم Kubernetes بإنشاء Pods جديدة تلقائيًا لتوزيع الطلبات، وعند انخفاض الحمل يقلل عدد الـ Pods لتوفير الموارد.
|
||||||
|
|
||||||
|
وإذا لم تعد موارد الـ Nodes كافية، يتم استخدام Cluster Autoscaler لإضافة Nodes جديدة تلقائيًا.
|
||||||
|
------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
3. اشرح كيف تكشف هذه المشكلة مبكراً باستخدام أدوات مراقبة غيمة :
|
||||||
|
يمكن اكتشاف المشكلة مبكرًا باستخدام أدوات المراقبة التالية:
|
||||||
|
|
||||||
|
Prometheus
|
||||||
|
|
||||||
|
يجمع Metrics مثل:
|
||||||
|
|
||||||
|
Memory Usage
|
||||||
|
CPU Usage
|
||||||
|
Container Restarts
|
||||||
|
OOMKilled Events
|
||||||
|
Pod Status
|
||||||
|
Grafana
|
||||||
|
|
||||||
|
تعرض Dashboard تحتوي على:
|
||||||
|
|
||||||
|
استهلاك الذاكرة.
|
||||||
|
استخدام المعالج.
|
||||||
|
عدد الـ Pods.
|
||||||
|
عدد مرات إعادة التشغيل.
|
||||||
|
Response Time.
|
||||||
|
Error Rate.
|
||||||
|
Alerting
|
||||||
|
|
||||||
|
يتم إرسال Alert عندما:
|
||||||
|
|
||||||
|
Memory Usage > 80%
|
||||||
|
عدد Restarts أكبر من 3 خلال 5 دقائق.
|
||||||
|
ظهور حدث OOMKilled.
|
||||||
|
أحد الـ Pods يدخل CrashLoopBackOff.
|
||||||
|
Availability أقل من 99%.
|
||||||
|
|
||||||
|
يمكن إرسال التنبيهات عبر:
|
||||||
|
|
||||||
|
Email
|
||||||
|
Slack
|
||||||
|
Microsoft Teams
|
||||||
|
|
||||||
|
|||||||
المرجع في مشكلة جديدة
حظر مستخدم