Skip to content

nginx — алерт при провале cache-hit-ratio (proxy_cache)

nginx proxy_cache hit-ratio упал — backend начинает гореть. Часто это «забыли в новой локации добавить proxy_cache_valid», или cache wiped, или TTL коротковат.

Рецепт

bash
#!/usr/bin/env bash
# /etc/cron.d/nginx-cache
# */1 * * * * root /opt/nginx-cache.sh

LOG=${LOG:-/var/log/nginx/access.log}
WINDOW=60                             # last 60 s
MIN_HITS_PCT=${MIN_HITS_PCT:-50}      # alert when HIT < 50 % of total
SINCE=$(date -d "-${WINDOW} seconds" '+%d/%b/%Y:%H:%M:%S')

# Assumes $upstream_cache_status is in the access log format ($cs)
read TOTAL HIT < <(awk -v since="$SINCE" '
  $4 >= "["since {
    t++
    if ($NF == "HIT") h++
  }
  END { print t+0, h+0 }
' "$LOG")

[ "$TOTAL" -lt 50 ] && exit 0          # too few requests to judge

PCT=$((HIT * 100 / TOTAL))
if [ "$PCT" -lt "$MIN_HITS_PCT" ]; then
  curl -fsS "$HEARTBEAT_URL" --data "hit_pct=$PCT,window=60s,total=$TOTAL"
  exit 2
fi
echo "OK (${PCT}% hit / 60s)"

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

Заверните в Enterno heartbeat — поймаете cache miss в 60 сек после деплоя нового nginx-конфига, до полного выгорания backend.

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

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