Как посчитать error rate по endpoint в SQL

Закрепи формулу error rate by endpoint в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать error rate by endpoint в Telegram

Зачем 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.

Закрепи формулу error rate by endpoint в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать error rate by endpoint в Telegram

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 — обе метрики.

Связанные темы

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.