دليل الاستجابة
نقطة نهاية عامة لا ترد
الأعراض
- EndpointDown / EndpointDownCritical فعّال.
- probe_success == 0 لـ instance ما.
- العملاء قد لا يستطيعون فتح الموقع/التطبيق.
الفحوصات الأولى
first-checks.sh
# 1. Which endpoints are failing? Pull labels from the alert in Alertmanager
# or hit Prometheus directly.
curl -s 'http://prometheus:9090/api/v1/query?query=probe_success==0' \
| jq '.data.result[] | .metric.instance'
# 2. Is the container even running?
docker ps --filter "name=via_prod" --format 'table {{.Names}}\t{{.Status}}' \
| grep -v ' Up ' # anything listed here is restarting / dead
# 3. Recent logs from the affected service.
docker logs --tail 200 via_prod-<service> 2>&1 | tail -60
# 4. Traefik routing for that public hostname.
docker exec via_prod-traefik wget -qO- http://localhost:8080/api/http/routers \
| jq '.[] | select(.rule | contains("api.via-basket.com"))'
# 5. TLS handshake (if HTTPS endpoint).
echo | openssl s_client -connect api.via-basket.com:443 -servername api.via-basket.com 2>&1 \
| grep -E 'subject=|issuer=|Verify return code'المعالجة الفورية
- الحاوية متوقفة:
docker compose -f docker-compose.prod.yml up -d <service>. تابع السجل لتفهم سبب الإيقاف. - حلقة إعادة تشغيل: افحص آخر 200 سطر من السجل وابحث عن الاستثناء الجذر — لا تعيد تشغيل بلا فهم.
- Traefik لا يوجّه: تأكد أن لـ container labels traefik.* صحيحة، ثم أعد تحميل Traefik.
- شهادة TLS منتهية: تابع Traefik logs، إن فشلت ACME أعد طلب الشهادة.
- DNS مكسور:
dig api.via-basket.comمن خارج EC2.
مسار التصعيد
- Warn (2m): #ops-alerts، عالجه أنت.
- Critical (5m): انتقل إلى PagerDuty.
- إذا تأثر اسم نطاق رئيسي (api/admin/landing) أكثر من 10 دقائق: أعلن الحادث على status page.
الاستعادة / التراجع
- إذا حدث الانقطاع بعد نشر جديد: استخدم redeploy للنسخة السابقة من GitHub Actions (workflow_dispatch).
- بعد الاستعادة، تابع probe_success لـ 5 دقائق قبل إغلاق الحادث.