Как посчитать error rate по endpoint в SQL
Содержание:
Зачем error rate by endpoint
Overall error rate 0.5% выглядит хорошо. Но из них 5% приходится на /checkout, и 0% на /healthcheck. Endpoint-level метрика показывает, где user-facing проблема. Critical для prioritizing fixes.
4xx vs 5xx
- 4xx (Client errors) — bad request, unauthorized, not found. Иногда normal (e.g., 404 от bot, 401 unauthenticated).
- 5xx (Server errors) — internal server error, bad gateway. Эти всегда плохо.
Smart monitoring tracks отдельно.
Error rate в SQL
SELECT
endpoint,
COUNT(*) AS total_requests,
COUNT(*) FILTER (WHERE status_code >= 400 AND status_code < 500) AS errors_4xx,
COUNT(*) FILTER (WHERE status_code >= 500) AS errors_5xx,
COUNT(*) FILTER (WHERE status_code >= 400 AND status_code < 500)::NUMERIC * 100
/ NULLIF(COUNT(*), 0) AS error_rate_4xx_pct,
COUNT(*) FILTER (WHERE status_code >= 500)::NUMERIC * 100
/ NULLIF(COUNT(*), 0) AS error_rate_5xx_pct
FROM api_requests
WHERE request_timestamp >= NOW() - INTERVAL '1 hour'
GROUP BY endpoint
HAVING COUNT(*) >= 100
ORDER BY error_rate_5xx_pct DESC;5xx свыше 1% — alert immediately.
Динамика
SELECT
DATE_TRUNC('minute', request_timestamp) AS minute,
endpoint,
COUNT(*) FILTER (WHERE status_code >= 500)::NUMERIC * 100
/ NULLIF(COUNT(*), 0) AS error_5xx_pct
FROM api_requests
WHERE request_timestamp >= NOW() - INTERVAL '6 hours'
AND endpoint IN ('/api/checkout', '/api/login', '/api/search')
GROUP BY DATE_TRUNC('minute', request_timestamp), endpoint
ORDER BY minute, endpoint;Visualize в Grafana — спайки 5xx показывают incidents.
Worst endpoints
SELECT
endpoint,
error_5xx_pct
FROM endpoint_error_rates
WHERE error_5xx_pct > 1.0
ORDER BY error_5xx_pct DESC;Топ-5 endpoints by error rate — focus list для команды.
Частые ошибки
Ошибка 1. Считать 4xx как fail. 401 от unauthenticated request — норма (signal protected endpoint). 404 от bot scan — норма. Не included в SLI.
Ошибка 2. Endpoint без normalization.
/users/123 и /users/456 — same logical endpoint. Aggregate by route template, не raw URL.
Ошибка 3. Без excluding healthchecks. Healthcheck endpoints inflate request count. Exclude.
Ошибка 4. Sampling. Если log sampling 1%, error rates приблизительные. Account for sampling rate.
Ошибка 5. Только overall error. P99 latency = 0%, но 5xx 2% — still bad. Latency и error — обе метрики.
Связанные темы
- Как посчитать error rate в SQL
- Как посчитать API latency в SQL
- Как посчитать latency percentiles в SQL
- Как посчитать Apdex score в SQL
FAQ
Какой error rate норма?
5xx меньше 0.1% — target. 4xx — зависит (часто 5-10% норма из-за 404/401).
Когда alert?
5xx свыше 1% в течение 5 минут — page on-call. Single spike — investigate.
Endpoint normalization?
REST: aggregate /users/* в /users/:id. GraphQL: by operation name.
Sampling impact?
Если log sample 10%, multiply count × 10. Rate (%) остаётся accurate.
Error rate vs latency?
Track оба. High latency без errors = slow. High errors = broken.