Runbooks
تشغيل وصيانة وإطلاقات آمنة للمحيط الإنتاجي.
الصحة والجاهزية
- التحقق من
GET /api/health(DB) وapps/bff → /readyقبل أي نشر. - مراقبة مؤشرات P95 في
/api/metrics(Budget: BFF ≤300ms، ingest ≤400ms، التنبيهات ≤1s) باستخدامconfig/ops-budgets.json. - تثبيت تليمترية المتصفح (Sentry/LCP/CLS/FID) ضد ميزانيات
config/perf-budgets.json.
اختبارات ما قبل الإطلاق
نفّذ الأوامر بالترتيب لضمان سلامة المسارات الحرجة:
pnpm test:e2e(سطح مكتب) +pnpm test:e2e --project="Mobile Chrome"لواجهات الهاتف.pnpm perf:market-apiللتحقق منp95 ≤ 400msعلى/api/market-data.pnpm perf:lhciمعlighthouserc.jsonللتأكد من الأداء/SEO.pnpm perf:budgetلفرض ميزانيات LCP/CLS/FID، وpnpm security:scanلمراجعة الثغرات.- تشغيل
scripts/perf/k6-market-api.js(k6) معBASE_URLوTHRESHOLD_P95حسب بيئة الاختبار.
استجابة الحوادث
- تحديد نوع العطل: بيانات (ingest/BFF) أم واجهة (Next) أم هوية (Auth).
- مراجعة
/api/metrics+ سجلات Loki + تنبيهات Grafana/Sentry. دوّنx-request-id. - عزل الخلل: خفّض
RATE_LIMIT، فعّلHEALTH_ALLOW_DEGRADED=1مؤقتاً، وأوقف مهام التنبيهات الزائدة عبر BullMQ DLQ. - استرجاع: أعد تشغيل خدمة محددة (ingest-ws، bff) ثم تحقق من
/readyوعتبات P95. - ختام الحادث: وثّق السبب الجذري، أعد ضبط الحدود، وأغلق التنبيهات بعد مراقبة 30 دقيقة.
نسخ احتياطي واستعادة
- تشغيل
pnpm maintenance:backupيومياً؛ تحقق من حجم الملف وسلامة الاستعادة. - استعادة جزئية: استخدم مسارات
prisma dbللـ restore مع لقطة زمنية، ثم شغّلpnpm maintenance:prune-market-ticksلتنظيف البيانات المتقادمة.
المراقبة والتنبيهات
اربط Grafana/Prometheus بلوحات: طلبات BFF، تأخر BullMQ، صحة ingest-ws. اربط Sentry للواجهة وBFF مع x-request-id للتتبّع الموحد. حافظ على CDN/Cache عبر Cache-Control و stale-while-revalidate في واجهات السوق، واضبط TTL للـ static بالـ CDN.