Skip to content

Apache — алерт по доле 5xx за последнюю минуту

Apache начал отдавать 502/503 у одного backend, но не у всех. Нужен endpoint с долей 5xx за последние 60 секунд.

Рецепт

bash
#!/usr/bin/env bash
# Computes 5xx ratio of last 60s of access log. Wrap as HTTP endpoint.
LOG="${LOG:-/var/log/apache2/access.log}"
THRESHOLD_PCT="${RATIO_THRESHOLD:-2}"

# Last 60 seconds of log entries
LINES=$(awk -v cutoff="$(date -d '60 seconds ago' '+%d/%b/%Y:%H:%M:%S')" '
  match($4, /\[([^]]+)\]/, m) { if (m[1] >= cutoff) print $9 }
' "$LOG")
TOTAL=$(echo "$LINES" | wc -l)
[ "$TOTAL" -lt 5 ] && { echo "ok 0"; exit 0; }  # too few requests
ERR=$(echo "$LINES" | awk '/^5/ {n++} END{print n+0}')
PCT=$(( ERR * 100 / TOTAL ))
[ "$PCT" -ge "$THRESHOLD_PCT" ] && echo "high $PCT% ($ERR/$TOTAL)" || echo "ok $PCT%"

То же самое в Enterno.io

Эндпойнт + HTTP-монитор Enterno на rule "тело начинается с ok" сразу ловят рост 5xx. Хорошо комбинируется с Security Scanner — увидите если падают именно те endpoint, где включён CSP / HSTS.

Настроить HTTP monitor → ← Все рецепты

Похожие рецепты

Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.