ميزانيات الأخطاء
ميزانيات الأخطاء
ميزانية الأخطاء هي الحد الأقصى من عدم الموثوقية المسموح بتجاوزه قبل انتهاك اتفاقية مستوى الخدمة (SLO) — وهي الفكرة الأكثر أهمية التي تُميّز ممارسة SRE عن العمليات التقليدية. إذا كان هدف SLO الخاص بك يقول "99.9% من الطلبات تنجح خلال نافذة 30 يومًا"، فلديك ما يعادل 43.2 دقيقة من الفشل المسموح به شهريًا. هذه الـ 43.2 دقيقة هي ميزانية الأخطاء. حين تنفد، فأنت قد وعدت مستخدميك بأكثر مما قدّمته فعلًا.
عقد ميزانية الأخطاء
ميزانية الأخطاء ليست مقياسًا تمتلكه فرقة SRE وحدها. إنها عقد ثنائي بين إدارة المنتج وهندسة الموثوقية. المنتج يريد شحن الميزات بسرعة؛ الموثوقية تريد الاستقرار. الميزانية تُوفّق بين هذا التوتر برقم مشترك وواضح:
- إذا كانت الميزانية بصحة جيدة — يمكن للفريق تحمّل مخاطر نشر أعلى، وإجراء تجارب، ودفع الإصدارات بعدوانية أكبر.
- إذا نفدت الميزانية — تتوقف عمليات النشر (أو تُقيَّد بشدة)، ويُخصَّص السبرينت التالي بالكامل لأعمال الموثوقية والتحقيق في الحوادث وتصليب البنية.
- إذا ظلّت الميزانية غير مستهلَكة باستمرار — فإن SLO متساهل للغاية ويجب تشديده؛ فأنت تهندس الموثوقية زيادةً على حساب السرعة.
حساب ميزانية الأخطاء
الصيغة مباشرة. بفرض هدف SLO يساوي T على نافذة زمنية W:
- الميزانية (نسبة) = 1 − T
- الميزانية (بالدقائق، نافذة 30 يومًا) = (1 − T) × 30 × 24 × 60
لأهداف SLO الشائعة على نافذة 30 يومًا (43,200 دقيقة إجمالًا):
- 99 % → 432 دقيقة (~7.2 ساعات) من التوقف المسموح به
- 99.9 % → 43.2 دقيقة
- 99.95 % → 21.6 دقيقة
- 99.99 % → 4.32 دقيقة
في Prometheus، تتابع الميزانية المتبقية على شكل كسر:
قيمة 1.0 تعني أن الميزانية كاملة. 0.0 تعني نفادها. قيمة سالبة تعني تجاوز حد SLO.
معدلات الحرق
مراقبة الميزانية المتبقية مباشرةً أبطأ من أن تفيد في الاستجابة للحوادث — لن تلاحظ المشكلة إلا بعد حدوث ضرر كبير. معدل الحرق يخبرك بمدى سرعة استهلاك الميزانية قياسًا بالمعدل الطبيعي.
معدل حرق 1 يعني أن الخدمة تستهلك ميزانيتها بالضبط بالمعدل الذي ينفدها عند نهاية النافذة. معدل حرق 14.4 خلال ساعة واحدة يعني أن الخدمة تحرق ميزانية شهر كامل في ساعتين فقط — وهو حادث P0 بأي معيار.
يوصي دليل Google SRE باستراتيجية تنبيه متعدد النوافذ ومتعدد معدلات الحرق لتحقيق التوازن بين الدقة والاستدعاء:
- حرق سريع (نافذة 1h / 5m): معدل الحرق > 14.4 → تنبيه فوري (2% من الميزانية في ساعة)
- حرق متوسط (نافذة 6h / 30m): معدل الحرق > 6 → تنبيه (5% من الميزانية في 6 ساعات)
- حرق بطيء (نافذة 1d / 2h): معدل الحرق > 3 → تذكرة (10% من الميزانية في يوم)
- تنبيه اتجاهي (نافذة 3d / 6h): معدل الحرق > 1 → تحذير (الميزانية تنفد أسرع مما تتجدد)
في Prometheus / Alertmanager بصيغة YAML:
مخطط معدل الحرق
ماذا يحدث حين تنفد الميزانية
استنزاف ميزانية الأخطاء يُطلق سياسة تصعيد محددة — وليس مجرد استياء غامض. تفرض مؤسسات SRE الناضجة ما يلي تلقائيًا:
- تجميد النشر — تمنع أنابيب CI/CD أي نشر جديد للإنتاج (بوابة سياسة تتحقق من ميزانية الأخطاء قبل السماح بالنشر). يُستثنى من ذلك الإصلاحات العاجلة وعمليات التراجع.
- سبرينت الموثوقية — يُفرَّغ الباك لوج للسبرينت التالي ويُملأ حصريًا بعناصر الموثوقية من قائمة إجراءات ما بعد الحوادث وبنود الدين التقني وأعمال التصليب.
- التصعيد للقيادة — يُرفع تجاوز SLO في التقرير الأسبوعي التنفيذي مع تحليل السبب الجذري وجداول زمنية للمعالجة.
- مراجعة الميزانية — إذا كانت الميزانية تنفد باستمرار بنفس نمط الفشل، فقد يحتاج SLO نفسه إلى مراجعة (تشديد أو تخفيف)، أو تحتاج بنية الخدمة إلى تغيير جذري.
أنماط الفشل الشائعة في الإنتاج
أكثر الأخطاء التي ترتكبها الفرق مع ميزانيات الأخطاء في الإنتاج:
- قياس SLI الخاطئ — حصر العد في أخطاء 5xx يُفوّت انتهاكات الزمن الكامن، والإخفاقات الجزئية (انتهاء مهلة خدمة طرف ثالث)، والأخطاء من جانب العميل. عرّف SLIs على مستوى رحلة المستخدم.
- عدم استثناء نوافذ الصيانة المخططة — إذا استنزفت الميزانية خلال نافذة صيانة أُخطر بها المستخدمون ووافقوا عليها، فهذا الإنفاق مُضلِّل. حدّد نوافذ الصيانة في أدوات SLO واستثنِها من حسابات الميزانية.
- التنبيه على نافذة واحدة فقط — التنبيه المبني على الميزانية المتبقية لـ 30 يومًا فقط يُسبّب تأخيرًا هائلًا. انقطاع كارثي يستنزف 100% من الميزانية في ساعة لن يُطلق تنبيهًا إلا بعد فوات الأوان. اقرن دائمًا تنبيهات معدل الحرق بنوافذ قصيرة.
- غياب القوة التنفيذية للسياسة — ميزانيات الأخطاء لا قيمة لها إذا كان بإمكان مدير هندسي تجاوز التجميد "هذه المرة فقط". قوّن السياسة في بوابات الأنابيب، لا في صفحة Confluence.