GH GambleHub

Мониторинг и логирование

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

Деньги в реальном времени: прием депозитов, мгновенные выплаты, расчет ставок и выигрышей, турниры — все чувствительно к задержкам и сбоям.
Регуляторика и аудит: требуется полная трассируемость действий (KYC/AML, платежи, лимиты ответственной игры).
Сложная распределенная архитектура: API-шлюзы, оркестрация платежей, EDA/Kafka, сервисы провайдеров, мобильные клиенты, фронты, BI-шина.
Цель: сократить MTTD/MTTR, держать SLO по золотым сигналам и обеспечивать форензику инцидентов.

2) Базовые понятия наблюдаемости

Логи: детальные события (структурированные JSON), пригодные для расследований и аудита.
Метрики: агрегаты во времени (TSDB), подходят для SLO/алертов.
Трейсы: причинно-следственные цепочки запросов (trace/span) сквозь сервисы/брокеры/БД.
Ивенты: доменные события (BetPlaced, DepositApproved) — мост между бизнес-метриками и техникой.

3) «Золотые сигналы» и SLI/SLO для iGaming

Latency: P95/P99 по критическим потокам (авторизация, депозит, ставка, старт сессии, спин).
Traffic: RPS по API, TPS по платежам, EPS по событиям.
Errors: доля 5xx/4xx, decline-rate, failed-withdrawals, ошибки провайдеров.
Saturation: CPU, memory, IO, Kafka lag, DB connections, thread-pools.

Пример SLO (платежный шлюз):
  • SLI: `1 - (failed_payments / total_payments)`
  • SLO: 99.7% успешных авторизаций карт за 30 дней (error budget 0.3%).

4) Архитектура сбора и обработки

1. Инжест: агенты (OTel Collector/Fluent Bit), SDK в приложении, RUM/синтетика.
2. Маршрутизация: брокер/шина телеметрии (OTLP/HTTP/GRPC), фильтры и маскировка PII.

3. Хранилища:
  • Метрики: TSDB (агрегации, downsampling).
  • Логи: hot (индексируемые) / warm (менее индексируемые) / cold (объектное хранилище, WORM).
  • Трейсы: time-indexed storage с ретенциями и tail-sampling.
  • 4. Аналитика/алерты: правила (PromQL/LogQL/SQL), корреляция с трейсамии и релизами.
  • 5. Дашборды: технические + бизнес-виды (платежи, RNG/провайдеры, турнирный движок).

5) Стандарт логов (JSON) и таксономия событий

Рекомендуется строгое JSON-логирование, единые ключи и уровни.

Уровни: `DEBUG < INFO < NOTICE < WARN < ERROR < FATAL < AUDIT`

Таксономия: `auth.`, `payment.`, `gameplay.`, `risk.`, `psp.`, `kyc.`, `rg.` (responsible gaming), `ops.`.

Пример JSON-события (AUDIT/PII-safe):
json
{
"ts": "2025-11-04T19:45:31. 842Z",
"lvl": "AUDIT",
"event_type": "payment. deposit_approved",
"correlation_id": "c-7d2c1f0b",
"trace_id": "2d6a9c0e4c0b1f72",
"span_id": "9f3a81d2a1c3b764",
"request_id": "r-8f12de9e",
"tenant": "brand_eu",
"psp": "acq_xyz",
"user_id_hash": "u:sha256:1e63…",
"device_id": "d-3c8f…",
"ip_trunc": "203. 0. 113. 0/24",
"amount_minor": 5000,
"currency": "EUR",
"result": "approved",
"latency_ms": 312,
"tags": ["pci_safe", "kyc_passed", "low_risk"],
"extra": {
"bin": "411111",
"method": "card",
"region": "EU",
"ab_test": "checkout_v2"
}
}
Правила PII/PCI-безопасности:
  • Маскируем PAN/BIN (храним только допустимые по политике поля), email/телефон — хэш/токен.
  • IP усекать до /24, GeoIP хранить отдельно.
  • Запрещаем свободный текст в `extra` для пользовательского ввода без санитайза.

6) Корреляция: trace_id, correlation_id, idempotency_key

В каждый лог и метрику добавлять `trace_id` (из OTel), `span_id`, `correlation_id` (сквозной для бизнес-процесса), `idempotency_key` (для платежных запросов).
Передавать baggage (tenant/brand, market, A/B-вариант), чтобы строить срезы.

7) Метрики: технические и бизнес

Технические: RPS, p95 latency, error rate, saturation, GC, pool usage, Kafka consumer lag.
Бизнес: CR регистрации→депозит, успешные авторизации, отмены выплат, NGR/GGR, ARPPU, RTP аномалии, drop-off на шаге KYC, доля ответственных лимитов.

Пример PromQL (error-rate API):
promql sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))

8) Трейсинг и OpenTelemetry

Инструментируем гейтвей, платежный оркестратор, игровое ядро, уведомления, KYC/AML, интеграции с провайдерами.
Head-sampling для общего потока + tail-sampling (повышенный) для ошибок/латентных спанов и платежей.
Пропагация контекста: `traceparent`/`tracestate`, Kafka headers, gRPC metadata.
Аннотируем спаны доменными событиями: `BetPlaced`, `WithdrawalRequested`.

9) Алертинг без шума

Многоступенчатые пороги (warning/critical), подавление флаппинга, дедупликация, тайм-слоты.
Корреляция: связываем «рост 5xx» + «Kafka lag» + «p95 latency PSP» → один инцидент.
SLO-based алерты: тратим error-budget — эскалируем.
Alerts-as-Code (GitOps), ревью и тесты правил.

Пример правила (Prometheus):
yaml groups:
- name: payments rules:
- alert: PaymentErrorSpike expr: (sum(rate(payment_errors_total[5m])) / sum(rate(payment_attempts_total[5m]))) > 0. 02 for: 10m labels: { severity: "critical", team: "payments" }
annotations:
summary: "Payment errors> 2% per 10m"
runbook: "runbooks/payments/error-spike. md"

10) Поиск по логам (пример LogQL)

logql
{app="psp-orchestrator", level=~"ERROR    FATAL"}
= "decline"
json amount_minor > 10000 region="EU"

Цель — быстро отсеять шум и выделить «дорогие» отказы в целевом регионе.

11) Дашборды: что обязательно

Payments Health: успешность/отказы по PSP, latency по методу, карта регионов, SLA провайдеров.
Game Core: RPS по провайдерам, p95 спина, error ratio SDK, RTP аномалии по слотам.
Player Journey: регистрация→KYC→депозит→игра→вывод (конверсионная воронка, время между шагами).
Infra: Kafka lag, DB connections, cache hit ratio, кластера Kubernetes (сетка подов/узлов).

12) Хранение, ретенции и стоимость (FinOps)

Кардинальность под контролем: избегать метрик с высокоизменяемыми лейблами (user_id).
Ретенции: метрики hot 30–90 дн., downsampling до 13 мес.; логи hot 7–14 дн., warm 30–90 дн., cold 1–3 года (с учетом регуляторики).
WORM/immutability для audit-логов, Object Lock.
Сжатие/партиционирование и ILM-политики; отдельные индексы для audit/PII-safe.
Сэмплинг логов на INFO/DEBUG; ERROR/AUDIT — полные.

13) Безопасность и комплаенс

PII/PCI: токенизация, хэширование, маскировка; минимизация данных.
RBAC/ABAC: доступ к логам/трейсам — по ролям, разделение тентов.
Секреты и ключи: не логировать credentials/токены; детекторы секретов на CI.
Аудит-трейл: входы в админку, изменения лимитов/выплат, ручные корректировки баланса — только в AUDIT-индекс, неизменно.
Legal-hold: механизм заморозки ретенций при расследованиях.

14) Качество данных телеметрии

Schema Registry для логов/ивентов (версионирование, совместимость).
Единая наменклатура полей (snake_case, единицы измерения).
Валидация на инжесте (дроп грязных событий, метрики о браке).
Backpressure и защита от «штормов логов».

15) SRE-процессы, онколл и рунбуки

Онколл-матрица и эскалации; Quiet Hours и ротации.
Рунбуки привязаны к алертам (шаги диагностики, SQL/LogQL рецепты, фичефлаги для деградации).
Postmortem без наказаний, action items с владельцами и дедлайнами.
Индикаторы команды: MTTD/MTTR, процент шумных алертов, покрытие рунбуками.

16) RUM и синтетика

RUM: WebVitals (LCP, CLS, INP), ошибки фронта, отпечатки устройств, регионы/провайдеры.
Синтетика: сценарии «регистрация→депозит→спин→вывод» из разных регионов; приватные локации для внутренних путей (админка/бэк-офис).

17) Практики релизов, экспериментов и фичефлагов

Линкуем трейсы с версиями релизов (commit/artefact).
A/B-теги в baggage → дашборд «влияние эксперимента на SLI».
Canary/Blue-Green: отдельные панели для канареек, error-budget burn rate.

18) Обнаружение аномалий и анти-фрод сигналы

Статистические триггеры (seasonality-aware) на decline-rate/chargeback-risk/всплеск новых карт.
Корреляции: «рост неуспешных депозитов + новый релиз PSP-адаптера».
Стриминговые правила (Kafka → Flink) для near-real-time реакций.

19) Дорожная карта внедрения (по этапам)

Этап 0 — Базис: JSON-логи, единые кореляционные поля, базовые метрики сервисов, общие дашборды, первые алерты.
Этап 1 — Трейсинг: OTel-инструментирование, head+tail sampling, связывание с логами.
Этап 2 — Бизнес-SLI/SLO: платежи/выводы/игровые метрики, SLO-алерты, error-budget процессы.
Этап 3 — Зрелость: Alerts-as-Code, ILM, раздельные ретенции, аномалия-детект, пер-сервис рунбуки, SRE-практики в CI/CD.

20) Чек-лист для ревью

  • Логи только JSON, единые ключи, PII-маскировка.
  • В каждом событии: `trace_id`, `span_id`, `correlation_id`, `tenant`.
  • Метрики покрывают золотые сигналы и бизнес-потоки.
  • SLO описаны, есть error-budget и алерты на burn rate.
  • Tail-sampling включен для платежных ошибок и высоких латентностей.
  • ILM/ретенции и WORM настроены для audit-логов.
  • RBAC на телеметрию, аудит доступа.
  • Дашборды по Payments/Game Core/Player Journey/Infra.
  • Рунбуки привязаны к каждому критическому алерту.
  • Постмортемы и action items — в бэклоге с владельцами.

Приложение A: атрибуты OpenTelemetry (рекомендация)

`service.name`, `service.version`, `deployment.environment`

`cloud.region`, `k8s.pod.name`, `k8s.container.name`

`tenant`, `brand`, `market`, `ab_test`, `user_segment`

`payment.method`, `psp`, `game.provider`, `game.id`

Приложение B: примеры метрик для SLO

`payment_success_ratio`, `withdrawal_ttw_p95` (time-to-wallet), `psp_latency_p99`

`game_spin_latency_p95`, `provider_error_rate`, `kafka_consumer_lag`

`auth_success_ratio`, `kyc_step_dropout`, `cache_hit_ratio`

Приложение C: быстрые рецепты расследований

«Растет `payment_error_rate`» → сравнить по PSP/региону/методу, проверить tail-трейсы, посмотреть релиз адаптера.
«p99 спинов ↑» → трассировки фронт→гейтвей→провайдер, проверить провайдера/каналы, лимиты thread-пулов, сетевые ретраи.
«Kafka lag ↑» → health консумеров, ретраи продюсеров, backpressure, медленные sinks/БД.

💡 При соблюдении этих практик платформа получает устойчивую, проверяемую и экономную систему наблюдаемости, которая одновременно служит инженерным инструментом, бизнес-радаром и гарантом комплаенса.
Contact

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

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

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

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

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

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