Алерт при всплеске 5xx в nginx
Сервер начал отвечать 503/504 — но это пропускает обычный uptime-мониторинг (главная отдаёт 200, ошибки в API).
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/nginx-5xx-rate
# */1 * * * * root /opt/nginx-5xx.sh /var/log/nginx/access.log
LOG=${1:-/var/log/nginx/access.log}
WINDOW=60 # last N seconds
THRESH=10 # 5xx allowed per window
SINCE=$(date -d "-${WINDOW} seconds" '+%d/%b/%Y:%H:%M:%S')
COUNT=$(awk -v since="$SINCE" '
$4 >= "["since {
if ($9 ~ /^5/) c++
}
END { print c+0 }
' "$LOG")
if [ "$COUNT" -gt "$THRESH" ]; then
curl -fsS -X POST "$SLACK_WEBHOOK" --data "{\"text\":\"nginx 5xx spike: $COUNT in last ${WINDOW}s\"}"
fi
То же самое в Enterno.io
Замените bash-cron на Enterno heartbeat (post при превышении порога) — получите retention-историю спайков и общий dashboard вместе с другими мониторами, а не разрозненные Slack-уведомления.
Похожие рецепты
Worker деплоится автоматически из main. Однажды сломался prod 5xx-rate ушёл в 12% — но dashboard смотрят раз в день. Нужна ежеминутная проверка.
Атакующий упёрся в `limit_req_zone` — все легитимные запросы тоже начали получать 429. Логи показывают это, но никто не следит.
Релиз выкатили — Sentry даёт правильные алерты только за крупные сбои. Хочу видеть медленный рост error-rate за окно 15 минут до того, как это станет инцидентом.