GH GambleHub

Телеметрия и сбор событий

1) Назначение и принципы

Цели:
  • Единый и предсказуемый поток событий для аналитики, антифрода, RG, комплаенса и ML.
  • Сквозная трассировка (user/session/request/trace) и воспроизводимость.
  • Минимизация PII и соответствие требованиям приватности.

Принципы: schema-first, privacy-by-design, idempotency-by-default, observability-by-default, cost-aware.

2) Таксономия событий

Платежные: `payment.deposit`, `payment.withdrawal`, `payment.chargeback`.
Игровые: `game.session_start/stop`, `game.bet`, `game.payout`, `bonus.applied`.
Пользовательские: `auth.login`, `profile.update`, `kyc.status_changed`, `rg.limit_set`.
Операционные: `api.request`, `error.exception`, `release.deploy`, `feature.flag_changed`.
Комплаенс: `aml.alert_opened`, `sanctions.screened`, `dsar.requested`.

Каждый тип имеет владельца (domain owner), схему и SLO свежести.

3) Схемы и контракты

Обязательные поля (минимум):
  • `event_time` (UTC), `event_type`, `schema_version`, `event_id` (UUID/ULID),
  • `trace_id`/`span_id`, `request_id`, `user.pseudo_id`, `session_id`,
`source` (clientserverprovider), `market` (jurisdiction), `labels.`.
Пример (JSON):
json
{
"event_id": "01HFY1S93R8X",
"event_time": "2025-11-01T18:45:12. 387Z",
"event_type": "game. bet",
"schema_version": "1. 4. 0",
"user": {"pseudo_id": "p-7a2e", "age_band": "25-34", "country": "EE"},
"session": {"id": "s-2233", "device_id": "d-9af0"},
"game": {"id": "G-BookOfX", "provider": "StudioA", "stake": {"value": 2. 00, "currency": "EUR"}},
"ctx": {"ip": "198. 51. 100. 10", "trace_id": "f4c2...", "request_id": "req-7f91"},
"labels": {"market": "EE", "affiliate": "A-77"}
}

Эволюция схем: семантические версии; backward-compatible — добавляем nullable поля; breaking — только в новой версии (`/v2`) с периодом двойной записи.

4) Инструментация: где и как

4.1 Клиент (Web/Mobile/Desktop)

SDK телеметрии с локальным буфером, batch-отправка, экспоненциальные ретраи.
Авто-события: визиты, клики, видимость блоков, web-vitals (TTFB, LCP, CLS), ошибки JS.
Идентификаторы: `device_id` (устойчивый, но приватный), `session_id` (обновляется), `user.pseudo_id`.
Защита от «шумов»: дедуп по `event_id`, троттлинг, client-side sampling.

4.2 Сервер/бэкенд

Обертки логгеров/трэйсера (OpenTelemetry) → эмит доменных событий.
Обязательное прокидывание `trace_id` из edge/gateway во все downstream сервисы.
Outbox-паттерн для транзакционной публикации доменных событий.

4.3 Провайдеры/третьи стороны

Коннекторы (PSP/KYC/студии) с нормализацией к хост-схемам; версионные адаптеры.
Подпись/проверка целостности payload, журнализм периметра (ingest audit).

5) OpenTelemetry (OTel)

Трейсы: каждый запрос получает `trace_id`; связываем логи/события через `trace_id`/`span_id`.
Логи: используем OTel Logs/преобразователи; метки среды `service.name`, `deployment.env`.
Метрики: RPS/latency/error-rate по сервисам, бизнес-метрики (GGR, конверсия).
Collector: единая точка приема/буфер/экспорт в Kafka/HTTP/графич. стек.

6) Идентификаторы и корреляция

`event_id` — уникальность и идемпотентность.
`user.pseudo_id` — стабильная псевдонимизация (маппинг отдельно и ограниченно).
`session_id`, `request_id`, `trace_id`, `device_id` — обязательны для сквозного анализа.
Согласованность ID на уровне API-шлюза и SDK.

7) Семплирование и контроль объема

Правила: per-event-type, per-market, динамическое (адаптивное) по нагрузке.
Точно-снятые события: платежные/комплаенс/инциденты — не семплируются.
Аналитические события: допускается 10–50% с корректирующими весами в витринах.
Server-side downsampling: допустим для high-frequency метрик.

8) Приватность и комплаенс

Минимизируйте PII: токенизируйте PAN/IBAN/email; IP → гео-коды/ASN при ingest.
Регионализация: отправляйте в региональные ingest-эндпоинты (EEA/UK/BR).
DSAR/RTBF: поддержка выборочного скрытия проекций; журнал правовых операций.
Политики хранения: сроки по типу (аналитика короче, регуляторные дольше); Legal Hold.

9) Транспорт и буферизация

Клиент → Edge: HTTPS (HTTP/2/3), `POST /telemetry/batch` (до 100 событий).
Edge → Шина: Kafka/Redpanda с партиционированием по `user.pseudo_id`/`tenant_id`.
Форматы: JSON (ingest), Avro/Protobuf (в шине), Parquet (в lake).
Надежность: ретраи с jitter, DLQ, poison-pill изоляция.

Спецификация batch (упрощенно):
json
{
"sdk": {"name":"igsdk-js","version":"2. 7. 1"},
"sent_at": "2025-11-01T18:45:12. 500Z",
"events": [ {... }, {... } ]
}

10) Надежность и идемпотентность

Client-generated `event_id` + серверный дедуп по `(event_id, source)`.
Outbox на сервисах, Exactly-Once-семантика в потоках (keyed state + dedupe).
Порядок в пределах ключа: партиционирование по `user/session`.
Контроль времени: NTP/PTP, допустимый дрейф (например, ≤ 200 мс), `received_at` на сервере.

11) Качество телеметрии (TQ) и SLO

Completeness: ≥ 99.5% событий критических типов за T.
Freshness: p95 задержка доставки до Silver ≤ 15 мин.
Correctness: валидные схемы ≥ 99.9%, drop-rate < 0.1%.
Trace coverage: доля запросов с `trace_id` ≥ 98%.
Cost/GB: целевой бюджет на ingest/хранение по доменам.

12) Наблюдаемость и дашборды

Минимальные виджеты:
  • Лаг ingest (p50/p95) по источникам и регионам.
  • Completeness по типам событий и рынкам.
  • Ошибки валидации схем/oversized-payloads.
  • Карта версий SDK и процент устаревших клиентов.
  • Корреляция web-vitals ↔ конверсия/отказы.

13) Клиентские SDK: требования

Легкий footprint, offline-буфер, отложенная инициализация.
Настройки: sampling, max batch size, max queue age, privacy-моды (no-PII).
Защита: подпись пакета/anti-tamper, обфускация ключей.
Обновление: feature-флаги для отключения шумных событий.

14) Edge-слой и защита

Rate limit, WAF, schema validation, компрессия (gzip/br).
Token bucket на клиента; анти-replay (`request_id`, TTL).
Снятие IP и UA → нормализация/обогащение вне «сырого» payload.

15) Интеграция с конвейером данных

Bronze: необратимо-добавочные сырые payload (для форензики).
Silver: нормализованные таблицы с дедупом/обогащением.
Gold: витрины для BI/AML/RG/продукта.
Линедж между событиями и отчетами; версии трансформаций.

16) Аналитика качества клиента

Коэффициент «тихих клиентов» (нет событий за N часов).
Аномалии «шторма» (mass duplicate / burst).
Доля «устаревших SDK» по версиям и платформам.

17) Процессы и RACI

R: Data Platform (ingest/шина/валидаторы), App Teams (инструментация SDK).
A: Head of Data/Architecture.
C: Compliance/DPO (PII/retention), SRE (SLO/инциденты).
I: BI/Маркетинг/Риск/Продукт.

18) Дорожная карта внедрения

MVP (2–4 недели):

1. Таксономия событий v1 + JSON-схемы для 6–8 типов.

2. SDK (Web/Android/iOS) с batch и sampling; Edge `/telemetry/batch`.

3. Kafka + Bronze слой; базовые валидаторы и дедуп.

4. Дашборд ingest lag/completeness, алерты на drop/валидатор.

Фаза 2 (4–8 недель):
  • OTel Collector, трейс-корреляция; Silver-нормализация и DQ-правила.
  • Региональные эндпоинты (EEA/UK), privacy-моды, DSAR/RTBF процедуры.
  • Карта версий SDK, авто-rollout обновлений по кольцам.
Фаза 3 (8–12 недель):
  • Exactly-Once в потоках, Feature Store подключения, антифрод-онлайн фиды.
  • Rule-as-Code для схем и валидаторов, симуляции изменений (impact analysis).
  • Оптимизация стоимости: adaptive sampling, Z-order/кластеризация в lake.

19) Чек-лист качества перед релизом

  • Заполнены обязательные поля схемы и корректные типы.
  • Присутствуют `trace_id`/`request_id`/`session_id`.
  • SDK поддерживает batch, retry, sampling.
  • Edge валидирует схему и ограничивает размер payload.
  • Включены приватность-фильтры и токенизация чувствительных полей.
  • Настроены SLO/алерты и дашборды.
  • Документация для доменов (пример события, owner, SLA).

20) Частые ошибки и как их избежать

Сырые события без схем: введите registry и CI-валидацию.
Нет идемпотентности: требуйте `event_id` и храните окна дедупа.
Смешение PII и аналитики: отделяйте маппинги, маскируйте поля.
Отсутствие трейсинга: прокладывайте `trace_id` сквозь gateway → сервисы → события.
Неуправляемые объемы: применяйте sampling/trrottling и budget-квоты.
Глобальный endpoint без регионов: используйте регионализацию и data residency.

21) Глоссарий (кратко)

OpenTelemetry (OTel) — открытый стандарт для трейсов/метрик/логов.
Outbox — транзакционная публикация доменных событий.
DLQ — очередь «битых» сообщений.
Sampling — отбор части событий для снижения объема.
Data Residency — хранение данных в нужной юрисдикции.

22) Итог

Хорошо спроектированная телеметрия — это договоренности, а не просто «отправка логов»: строгие схемы, согласованные идентификаторы, приватность по умолчанию, надежный транспорт, наблюдаемость и экономная стоимость. Следуя этой статье, вы получите устойчивый поток событий, готовый к аналитике, комплаенсу и машинному обучению с предсказуемыми SLO.

Contact

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

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

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

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

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

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