GH GambleHub

API аналитика и метрики производительности

1) Зачем это нужно

API — «кровеносная система» платформы. Без строгих метрик мы не можем:
  • доказать выполнение SLO и SLA,
  • управлять пропускной способностью и экономикой запросов,
  • быстро локализовать деградации (p99-хвосты, всплески 5xx),
  • приоритизировать оптимизации по влиянию на бизнес.

Цель: единая модель наблюдаемости, где каждый запрос отслеживается от периметра до БД с общими идентификаторами и согласованными SLI.

2) Таксономия метрик

Технические: RPS, латентность (p50/p95/p99), error rate (4xx/5xx), saturation (CPU, memory, file-desc), queue time.
Продуктовые: успешные операции/мин, конверсия шага (200/total), доля rate-limited (429), ретраи, пользовательские сегменты.
Стоимость: cost/request (CPU-ms + egress + БД-запросы), стоимость фичи/эндпоинта, $/тенант, $/1k вызовов.

3) «Золотые сигналы»: RED и USE

RED (для API):
  • Rate — запросы/сек (по эндпоинту/тенанту/плану).
  • Errors — 4xx/5xx/429 доли и абсолюты.
  • Duration — p50/p95/p99 end-to-end и по стадиям (ingress → app → DB → сторонние).
USE (для ресурсов):
  • Utilization — загрузка CPU/IO/канала.
  • Saturation — очереди (run-queue, backlog, DB wait).
  • Errors — ошибки драйверов/таймауты.

4) Базовые определения и формулы

Availability SLI: `1 − (5xx + gateway_timeout) / all_requests`.
Success SLI: `2xx / (all − 429_shadow)` (исключая «теневые» блокировки).
Apdex: `(|T≤T| + 0.5·|T≤4T|) / all`, где `T` — целевой «хороший» порог.
Tail amplification: `p99_total − max(p99_stage_i)` — вклад очередей/композиции.
Error budget (месяц) при 99.9%: `бюджет = 0.1% время_периода`.

Рекомендуемые перцентильные бины гистограмм latency: `[5ms, 10ms, 25ms, 50ms, 100ms, 250ms, 500ms, 1s, 2.5s, 5s]`.

5) SLI/SLO и алертинг по burn-rate

Пример SLO (публичный API):
  • Доступность: ≥ 99.9% / 30 дней.
  • p95 латентности `GET /wallet/balance` < 150 мс; `POST /payments` < 400 мс.
  • Ошибки `5xx` < 0.2%. `429` (твердые) < 1% от общего трафика.
Burn-rate алерты (двухоконные):
  • 2% бюджета за 1 час или 5% за 6 часов → page инженеру.
  • 10% за сутки → приоритизация RCA.

6) Набор метрик (что собирать обязательно)

На периметре (шлюз/WAF):
  • `http_requests_total{route,method,status,tenant,plan}`
  • `http_request_duration_seconds_bucket{route,...}` (гистограмма)
  • `retries_total{reason}`, `rate_limited_total{key,policy}`
  • Размеры тела: `request_bytes`, `response_bytes`
В приложении:
  • `db_client_requests_total{op,table}`, `db_latency_seconds_bucket{op}`
  • `cache_ops_total{op}`, hit-rate кэша внешние вызовы: `outbound_calls_total{provider,op}`, latency/ошибки/таймауты очереди/пулы: длины/задержки, активные воркеры ресурсные USE: CPU, RSS, FD, GC-паузы

Бизнес-лейблы: `tenant_id`, `region`, `kyc_level`, `plan`, `feature_flag`.

7) Трассировка и корреляция (OpenTelemetry)

W3C Trace-Context (`traceparent`, `tracestate`) на всех хопах.
Span-ы по стадиям: ingress → authZ → app handler → DB/Redis → PSP/внешние.
Attributes/лейблы: `http.route`, `enduser.id`, `tenant.id`, `idempotency.key`, `risk.score`.
Exemplars: связывайте точки на графиках latency/error с конкретными trace-id.

Sampling:
  • head-based 1–10% для «обычных» путей,
  • tail-based для хвостов (берем медленные/ошибочные),
  • adaptive для пиков и инцидентов.
  • Baggage: перенос `tenant`/`risk` для разрезов без разметки каждого события.

8) Логи: структура и приватность

Структурированный JSON; обязательные поля: `ts`, `trace_id`, `span_id`, `route`, `status`, `latency_ms`, `tenant`, `user_id_hash`.
Политика PII: маскируйте PAN/PII; запрещайте секреты/токены.
Сэмплинг логов: высокий для 4xx/5xx/429 и «длинных» запросов.

9) Карта дашбордов (минимальный набор)

1. Exec-Summary: RPS, Availability, Error-rate, p95/p99 latency, 429 доля, burn-rate бюджета.
2. Per-Route: топ-эндоинты по RPS/ошибкам/хвостам; сравнение версий (канареечка).
3. Per-Tenant/Plan: лидеры по нагрузке/стоимости/ошибкам.
4. Dependency Health: DB, cache, PSP/внешние — latency, ошибки, saturation.
5. Capacity: CPU/RAM/FD, очереди, connection pool, GC, лимиты контейнеров.
6. Security/Abuse: 401/403, 429/политики, гео/ASN срезы, всплески ретраев.

10) Алерты (пороговые и трендовые)

`error_rate{route}` > 2% (5 минут) и RPS > N → пагер.
`p99_latency{critical}` > целевого порога (10 минут).
`burn_rate` по бюджету (см. §5).
DB `timeouts`/`deadlocks` или рост `queue_time` > X мс.
Внешние провайдеры: `outbound_5xx_rate{provider}` > 1% + SLO-зависимые.

11) Емкостное планирование и производительность

Закон Литтла: `L = λ · W` (средняя длина очереди = трафик × среднее время).
Целевое p95 раскладываем: `ingress + app + DB + external + queue`.
Concurrency budget: фиксируем максимум одновременных write-операций.
Budget-метрика: «мс CPU на запрос»; держим запас 30–50% к пику.
Взаимодействие с rate-limit: измеряйте долю запросов у «потолка» квоты и влияние на латентность.

12) Нагрузочные и синтетические проверки

Виды: базовая нагрузка, бурсты ×10, «ступени», долговременные плато, стресс/chaos (убийство нод, задержки сети), синтетика по критическим клиентским сценариям.
Профилирование: CPU/alloc/lock-contention, N+1 (SQL/HTTP), медленные коды.
Контроль регрессов: сравнение p95/p99/ошибок до/после релиза (канареечное).

13) Стоимость (Cost-Observability)

Метрики затрат: `cpu_ms`, `egress_bytes`, `db_calls`, `$ per 1k requests`.
Аллокация на эндпоинт/тенант/фичу: теги биллинга из оркестратора + метрики нагрузки → отчет по юнит-экономике API.
Алгоритм оптимизации: выбираем TOP-эндпоинты по произведению `traffic × cost × (p95 − цель)`.

14) Пер-тенант аналитика и «справедливость»

Все ключевые метрики — с лейблом `tenant_id/plan`.
Доля «тяжелых» клиентов в хвостах p99; отдельные лимиты/квоты и бюджеты ретраев.
Справедливый шейринг: при перегрузке уменьшаем долю «громких» арендаторов.

15) Специфика iGaming/финансов

Разрезы по `kyc_level`, `risk_tier`, `payment_method`.
SLI для «денежных» путей (`POST /deposits`, `POST /withdrawals`): ниже целевые p95, отдельные бюджеты ошибок.
Метрики Time-to-Wallet (TTW), доля автоблокировок антифродом, конверсия выплаты.
Аудит: неизменяемые журналы для финансовых действий и решений антифрода.

16) Инструментация: практики реализации

Именование метрик (пример):
  • `api_http_requests_total` (counter)
  • `api_http_request_duration_seconds` (histogram)
  • `api_outbound_requests_total`, `api_db_query_duration_seconds`
  • `api_rate_limited_total`, `api_retry_total{reason}`

Лейблы: `route`, `method`, `status_class`, `tenant`, `region`, `version`, `canary`, `provider`, `db_table`.
Кардинальность: избегайте свободных значений (user_id), используйте «бакеты»/хеш.
Exemplars: подключите к гистограммам p95/p99 → клик по trace.

17) Антипаттерны

Средние вместо перцентилей; отсутствие разбиения на статус-классы.
Несогласованные `route`/`path` (динамические ID «вшиты» в лейблы).
Лейблы с высокой кардинальностью (raw user_id, IP).
Отсутствие раздельного учета внешних провайдеров (PSP/3rd-party).
Алерты по «шума» (единоокно и один порог).
p99 без учета queue time (маскирует реальную деградацию).

18) Контрольный список prod-готовности

  • Определены SLI/SLO и error-budget, согласованы с бизнесом.
  • Единые гистограммы latency и статус-классы; p95/p99 на дашбордах.
  • Полная трассировка (OTel), корреляция логов/метрик/трейсов.
  • Алерты burn-rate (двухоконные), пороги по p99 и error-rate.
  • Пер-тенант/пер-план разрезы и отчеты по стоимости.
  • Дашборды: Exec, Per-Route, Dependencies, Capacity, Abuse.
  • Нагрузочные сценарии (бурст/плато/стресс), профилирование.
  • Политики ретраев с джиттером; учет влияния ретраев на RPS.
  • Документация SLA/SLO для партнеров и публичных клиентов.
  • Ретеншн/маскирование логов, защита PII.

19) TL;DR

Стройте наблюдаемость вокруг SLI/SLO и error-budget, измеряйте RED/USE, собирайте гистограммы latency с p95/p99 и «queue time», распространяйте единый trace-id от периметра до БД, используйте tail/adaptive-sampling, держите пер-тенант/стоимостные разрезы и двухоконный burn-rate-алертинг. Емкость планируйте по законам очередей и влиянию на бизнес-метрики; антипаттерны — средние вместо перцентилей, высокая кардинальность и неучтенные внешние зависимости.

Contact

Свяжитесь с нами

Обращайтесь по любым вопросам или за поддержкой.Мы всегда готовы помочь!

Telegram
@Gamble_GC
Начать интеграцию

Email — обязателен. Telegram или WhatsApp — по желанию.

Ваше имя необязательно
Email необязательно
Тема необязательно
Сообщение необязательно
Telegram необязательно
@
Если укажете Telegram — мы ответим и там, в дополнение к Email.
WhatsApp необязательно
Формат: +код страны и номер (например, +380XXXXXXXXX).

Нажимая кнопку, вы соглашаетесь на обработку данных.