دليل الاستجابة
محدِّد المعدل يفشل مفتوحاً
VIARateLimitFailOpenSustained · VIARateLimitRedisErrorsHigh
الأعراض
- تنبيه Prometheus: 50+ قرار "fail_open" خلال 5 دقائق.
- معدل أخطاء Redis في البوابة > 5/s.
- زيادة حركة غير متوقعة من مفتاح API واحد أو أكثر.
التحقق
check.sh
# 1. Is Redis reachable from the gateway container?
docker exec via_prod-api-gateway redis-cli -h redis -a "$REDIS_PASSWORD" ping
# Expect: PONG
# 2. Current error-type breakdown (last 5 min) via Prometheus:
curl -s 'http://localhost:9090/api/v1/query?query=sum by (error_type) (rate(via_rate_limit_redis_errors_total[5m]))'
# 3. Top keys currently triggering fail_open:
curl -s 'http://localhost:9090/api/v1/query?query=topk(5, sum by (api_key_id) (rate(via_rate_limit_decisions_total{decision="fail_open"}[5m])))'المعالجة
- إذا كان Redis معطّلاً: أعد تشغيل الحاوية
docker compose -f compose/docker-compose.prod.yml restart redis. - إذا كان الهجوم مشتبهاً: قلِب fail-mode إلى closed
API_KEY_RATE_LIMIT_FAIL_MODE=closedعبر GitHub repo variables وأعد النشر. - ارفع سعة Redis أو قم بترقية instance type إذا كان CPU > 80%.
- ابطل مفتاح API المسيء من لوحة المطوّر وأبلغ العميل.
ما بعد الحادث
- وثّق المفتاح المسيء + العميل في تقرير ما بعد الحادث.
- أعد fail-mode إلى open بعد استقرار Redis لمدة ساعة.
- راجع العتبات في rate-limit.yml إذا كانت خاطئة.