Cloudflare Workers — алерт по росту 5xx error rate
Worker деплоится автоматически из main. Однажды сломался prod 5xx-rate ушёл в 12% — но dashboard смотрят раз в день. Нужна ежеминутная проверка.
Рецепт
#!/usr/bin/env bash
# Cloudflare GraphQL Analytics — last 5 min error fraction.
CF_TOKEN="${CF_TOKEN:?must be set}"
CF_ACCOUNT="${CF_ACCOUNT:?must be set}"
WORKER="${WORKER:?must be set}"
THRESHOLD_PCT="${THRESHOLD_PCT:-2}"
NOW=$(date -u -d '5 min ago' +%FT%TZ)
RESP=$(curl -sS https://api.cloudflare.com/client/v4/graphql \
-H "Authorization: Bearer $CF_TOKEN" -H "Content-Type: application/json" \
-d "{\"query\":\"{viewer{accounts(filter:{accountTag:\\\"$CF_ACCOUNT\\\"}){workersInvocationsAdaptive(filter:{datetime_geq:\\\"$NOW\\\",scriptName:\\\"$WORKER\\\"},limit:1){sum{requests errors}}}}}\"}")
REQ=$(echo "$RESP" | python3 -c 'import json,sys;d=json.load(sys.stdin);print(d["data"]["viewer"]["accounts"][0]["workersInvocationsAdaptive"][0]["sum"]["requests"])' 2>/dev/null)
ERR=$(echo "$RESP" | python3 -c 'import json,sys;d=json.load(sys.stdin);print(d["data"]["viewer"]["accounts"][0]["workersInvocationsAdaptive"][0]["sum"]["errors"])' 2>/dev/null)
[ -z "$REQ" ] || [ "$REQ" = "0" ] && { echo "no-data"; exit 0; }
PCT=$(( ERR * 100 / REQ ))
[ "$PCT" -ge "$THRESHOLD_PCT" ] && echo "high $PCT% ($ERR/$REQ)" || echo "ok $PCT%"
То же самое в Enterno.io
Wrap в endpoint и положите Enterno HTTP-монитор с keyword "ok" на 1-минутный интервал. Pro+ корреляция с site-health покажет — это Worker лагает или upstream.
Похожие рецепты
Сервер начал отвечать 503/504 — но это пропускает обычный uptime-мониторинг (главная отдаёт 200, ошибки в API).
CDN cache_status (cf-cache-status или x-cache) внезапно даёт MISS на больше 30% запросов — вырос origin-load и счёт за бэкенд.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.