We are still cooking the magic in the way!
مشروع: سياسة SLO وميزانية الأخطاء
مشروع: سياسة SLO وميزانية الأخطاء
كل ما في هذا الدرس التعليمي كان يُمهّد لهذا الدرس. أنت تعرف الآن كيف تكتب SLIs وSLOs، وتحسب ميزانيات الأخطاء، وتبني تنبيهات معدل الاحتراق، وتقضي على التوليد، وتُجري مراجعات جاهزية الإنتاج. الآن ستضع كل ذلك في منتَج واحد متماسك — وثيقة سياسة SLO وميزانية الأخطاء — لخدمة إنتاج واقعية. هذا هو المنتَج الذي يقدمه فريق SRE لقيادة الهندسة وإدارة المنتج ومهندسي المناوبة. إنه العقد الذي يحكم سرعة الشحن، ومتى تجمّد النشر، وكيف تستعيد الموثوقية بعد الحوادث.
سنعمل عبر مثال ملموس: PaymentService، واجهة برمجية حيوية تعالج المعاملات المالية. هذا هو عمداً أصعب صنف من الخدمات — متطلبات كمون منخفضة، وضمانات صحة قوية، ومسارات تدقيق تنظيمية، وتسامح شبه معدوم مع فقدان البيانات. إذا استطعت كتابة سياسة SLO لهذا، تستطيع كتابتها لأي شيء.
الخطوة 1: تعريف الخدمة ومستخدميها
ابدأ بالسياق. كل سياسة SLO تفتح بالإجابة على: من يستخدم هذه الخدمة، وماذا تفعل لهم، وما التكلفة الفعلية للفشل؟ بالنسبة لـ PaymentService:
- الخدمة: PaymentService — تعالج طلبات الشحن والاسترداد والتخويل عبر واجهات REST وgRPC.
- المستخدمون: العملاء الخارجيون (تدفق الدفع عند السداد)، والخدمات الداخلية (محرك مكافحة الاحتيال، خدمة الطلبات)، والتجار الطرف الثالث عبر مفتاح API.
- تأثير الفشل: دفعة فاشلة = إيرادات مفقودة، خطر محتمل لرسوم مزدوجة، تذبذب العملاء. سداد بطيء = تخلي عن سلة التسوق. كل 100ms إضافية في زمن الاستجابة عند المئين التاسع والتسعين تترابط مع انخفاض قابل للقياس في الإيرادات (موثق لدى Amazon وGoogle وShopify).
- نافذة القياس: 28 يوماً متحركة. (نوافذ 28 يوماً تُخفف الموسمية الأسبوعية/الشهرية أفضل من الأشهر التقويمية.)
الخطوة 2: اختيار SLIs
بالنسبة لواجهة API مثل PaymentService، فئات SLI القانونية هي التوفر، والكمون، والصحة. لا تحتاج لقياس كل شيء — اختر SLIs التي تمثل بشكل مباشر ما يهتم به المستخدمون.
- SLI التوفر:
sum(rate(http_requests_total{service="payment",code!~"5.."}[5m])) / sum(rate(http_requests_total{service="payment"}[5m]))— نسبة الاستجابات غير-5xx من مجموع الطلبات. - SLI الكمون: نسبة الطلبات المكتملة خلال 200ms عند المئين التاسع والتسعين. استخدم دلاء الهيستوجرام، لا المتوسطات. المتوسطات تُخفي كمون الذيل؛ p99 هو ما يشعر به المستخدمون.
- SLI الصحة: نسبة طلبات الشحن التي تنتج بالضبط قيد دفتر أستاذ واحد (فحص الأمانة). يُقاس عبر مهمة مطابقة تعمل في الخلفية تقارن قاعدة بيانات الدفع بخدمة دفتر الأستاذ الأدنى كل 5 دقائق.
/health 60 مرة في الدقيقة يمكنه تخفيف إشارة التوفر الفعلية بشكل ملحوظ. أضف فلتر تسمية: code!~"5..", path!="/health".الخطوة 3: تحديد أهداف SLO
أهداف SLO ليست طموحية — بل مُعيَّرة على ما يحتاجه المستخدمون فعلاً وما يستطيع نظامك تقديمه واقعياً. العملية: ابدأ من البيانات التاريخية، وحدد مستوى الموثوقية الذي ينتج دونه شكاوى مستخدمين موثقة (انظر في تذاكر الدعم، وبيانات التذبذب، وسجل خرق SLA)، ثم ضع SLO الداخلي أعلى بقليل من ذلك العتبة. اترك هامشاً بين SLO وأي SLA خارجي التزمت به.
بالنسبة لـ PaymentService، بعد تحليل 12 شهراً من بيانات الإنتاج وربط معدلات الخطأ بحجم الدعم:
- SLO التوفر: 99.95% من الطلبات تنجح (غير-5xx) على نافذة 28 يوماً متحركة. ميزانية الأخطاء: 0.05% ≈ 21.6 دقيقة من توقف مكافئ.
- SLO الكمون: 99% من الطلبات تكتمل خلال 200ms؛ 95% خلال 80ms. (هدفا كمون يلتقطان تجربة الذيل والكتلة معاً.)
- SLO الصحة: 99.999% من طلبات الشحن تنتج بالضبط قيد دفتر أستاذ واحد. (خمسة تسعات هنا لأن انتهاكات سلامة البيانات كارثية وقابلة للإبلاغ تنظيمياً.)
- SLA الخارجي (للعملاء): 99.9% توفر شهري. SLO الداخلي عند 99.95% يعطيك هامش 0.05% قبل خرق SLA.
الخطوة 4: كتابة قواعد تنبيه معدل الاحتراق
تنبيهات المبنية على SLO تُطلق حين تستهلك ميزانية الأخطاء أسرع مما هو مستدام. نمط النوافذ المتعددة ومعدلات الاحتراق المتعددة (من فصل التنبيه في Google) يمنحك كشفاً سريعاً للاحتراقات الكارثية وكشفاً بطيئاً للاحتراقات المزمنة، مع معدلات إيجابية كاذبة منخفضة. إليك قواعد تنبيه Prometheus لتوفر PaymentService:
الخطوة 5: كتابة سياسة ميزانية الأخطاء
قواعد التنبيه تُخبرك متى يكون هناك خطأ. سياسة ميزانية الأخطاء تُخبر مؤسستك ماذا تفعل حيال ذلك — ومن يملك صلاحية اتخاذ القرارات. هذا هو النصف الحوكمي من وثيقة SLO. بدونه، يتخذ المهندسون الأفراد قرارات مختلفة في الحوادث، وتتفاوض فرق المنتج على استثناءات عشوائياً، وتصبح SLO بلا أسنان.
سياسة ميزانية الأخطاء للإنتاج لها أربعة أقسام: عتبات الميزانية ومُحفّزاتها، ومصفوفة التصعيد وصلاحية القرار، وعملية طلب الاستثناءات، وإيقاع المراجعة. إليك سياسة PaymentService:
الخطوة 6: ربطها بلوحة القيادة ودليل التشغيل
السياسة مفيدة فقط إذا استطاع مهندس المناوبة رؤية استهلاك الميزانية للوهلة الأولى ويعرف بالضبط ماذا يفعل حين تُتجاوز عتبة. منتجان ختاميان يكملان الحزمة:
لوحات Grafana SLO — لوحة واحدة لكل SLI تظهر: تحقق SLO الحالي لـ 28 يوماً مقابل الهدف، والميزانية المتبقية (كنسبة مئوية وكدقائق)، ومعدل الاحتراق خلال آخر 1h/6h/24h، ومؤشر حالة مُرمَّز بالألوان (أخضر/أصفر/أحمر/أسود يطابق عتبات السياسة الأربع). استخدم قواعد التسجيل لحساب استعلامات نطاق 28 يوماً مسبقاً — استعلامات PromQL الخام لنطاق 28 يوماً مكلفة على المجموعات الكبيرة.
روابط دليل التشغيل في كل تنبيه: تعليق توضيحي runbook على كل تنبيه يجب أن يشير إلى صفحة تجيب، بالترتيب: ما هذا التنبيه، ما تأثير المستخدم، ما هي أوامر التشخيص الثلاثة الأولى، ما الأسباب الشائعة وإصلاحاتها، ومتى تُصعِّد. دليل التشغيل هو السياسة مُشغَّلة — يترجم قرار الحوكمة ("تجميد النشر") إلى رسالة Slack المحددة للإرسال، وقناة الحادثة لفتحها، والأشخاص للتنبيه.
GET /slo/paymentsvc/budget تعيد نسبة الميزانية؛ خط الأنابيب يفشل (أو ينشئ بوابة موافقة يدوية) حين تكون دون العتبة.قائمة تحقق المنتج الكامل
حين تقدم سياسة SLO وميزانية أخطاء لخدمة ما، يجب أن تحتوي على:
- سياق الخدمة: من يستخدمها، وتكلفة الفشل، ولماذا اختيرت هذه SLIs دون البدائل.
- تعريفات SLI: استعلامات PromQL أو SQL الدقيقة لكل SLI. لا غموض — نفس الاستعلام يجب أن ينتج نفس الرقم في كل مرة.
- أهداف SLO: النسبة والنافذة والمبرر المبني على البيانات (التحقق التاريخي، عتبة شكوى المستخدم).
- جدول ميزانية الأخطاء: الميزانية بالدقائق وبعدد الطلبات عند حجم المرور المتوسط، لكل SLO.
- قواعد تنبيه معدل الاحتراق: YAML لتنبيهات الاحتراق السريع والبطيء، مع تسميات الخطورة وروابط دليل التشغيل.
- مصفوفة سياسة الميزانية: العتبات الأربع، والإجراء الذي تُفعّله كل واحدة، ومن يملك الصلاحية.
- عملية الاستثناء: كيف تطلب الفرق استثناء نشر أثناء التجميد.
- جدول المراجعة: الإيقاع الأسبوعي والشهري والفصلي مع أصحاب مُسمَّيين.
- رابط لوحة القيادة: URL للوحة Grafana SLO الحية حتى يتمكن أي صاحب مصلحة من التحقق من الحالة الراهنة.
هذا هو المنتَج. تسعة أقسام، صفحة إلى ثلاث صفحات. إنه الفرق بين ممارسة SRE وثقافة SRE — لأنه حين يوقع القيادة على السياسة، كل تجميد نشر يحمل صلاحية تنظيمية، وكل استثناء قابل للتتبع، وكل مراجعة SLO تنتج تحسينات قابلة للتنفيذ بدلاً من جدالات.