Skip to content

Cloudflare Workers — алерт по росту 5xx error rate

Worker деплоится автоматически из main. Однажды сломался prod 5xx-rate ушёл в 12% — но dashboard смотрят раз в день. Нужна ежеминутная проверка.

Рецепт

bash
#!/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.

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

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