GH GambleHub

Grafana и визуализация данных

(Раздел: Технологии и Инфраструктура)

Краткое резюме

Grafana — витрина всей наблюдаемости: метрики, логи, трассировки, бизнес-показатели и алерты в одном месте. Для iGaming это: мониторинг p95/p99, конверсия платежей, Time-to-Wallet, доступность провайдеров игр, гео-распределение инцидентов и сравнение релизов (stable vs canary). Успех: шаблоны (переменные), понятные панели, аннотации релизов, SLO-дашборды и дисциплина прав доступа.

1) Архитектура подключений

Datasources: Prometheus (метрики), Loki/ELK (логи), Tempo/Jaeger (трейсы), ClickHouse/BigQuery/PG (бизнес-данные), OTLP через Gateway.
Ключевые связи: из метрики → exemplar → trace → связанные логи по `trace_id`.
Папки и RBAC: отдельные папки `SRE`, `Payments`, `Risk`, `Games`, `BizOps`; роли `Viewer/Editor/Admin` и granular permissions.

2) Дизайн дашбордов: принципы

1. Ответ на вопрос за 1–2 клика: от SLO-карты к деталям.
2. RED/USE по каждому сервису + доменные карточки (TTW, конверсия депозитов).
3. Стабильная сетка: 24-колоночная, крупные KPI сверху, детали снизу.
4. Цвета и пороги: минимум, только по SLA/SLO.
5. Аннотации релизов: Git SHA, версия, тип релиза (canary/blue-green).

3) Переменные и темплейты (templating)

Переменные превращают один дашборд в много.

Пример (Prometheus query-variable):
  • Name: `service`
  • Query: `label_values(up, service)`
  • Multi-select + include all — удобно для агрегатов.
Каскадные переменные:
  • `region` → `env` → `service` → `instance`.
  • Используйте `regex`/`sort` для UX и `refresh: On dashboard load`.

4) Панели и типы визуализации

Time series: p50/p95/p99, error-rate, throughput.
Stat/Gauge: целевые KPI (availability, TTW p95).
Bar gauge/Table: топ-N маршрутов/PSP/провайдеров игр.
Geomap: тепловые карты инцидентов/латентности по странам/POP.
Canvas: схематичные потоки (Player → API → PSP → Bank).
Node graph: зависимости сервисов, окраска по ошибкам.

Трансформации:
  • Labels to fields, Outer join (склейка метрик и бизнес-таблиц), Reduce (мин/макс/avg), Add field from calculation (конверсия).

5) Примеры запросов и панелей

5.1 p95 latency (PromQL)

promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket{service="$service",region="$region"}[5m]))
)

5.2 Успешность запросов (SLO proxy)

promql sum(rate(http_requests_total{service="$service",status=~"2..    3.."}[5m]))
/
sum(rate(http_requests_total{service="$service"}[5m]))

5.3 Конверсия платежей (PromQL агрегат)

promql sum(rate(payments_success_total{psp=~"$psp",currency=~"$currency"}[15m]))
/
sum(rate(payments_attempt_total{psp=~"$psp",currency=~"$currency"}[15m]))

5.4 Быстрый прыжок в трассу (exemplars)

В панели `Time series` включите Exemplars → клик по точке → открывается Tempo с `trace_id`.

5.5 Логи по trace_id (Loki)

logql
{service="$service"}     = "$traceID"

6) Аннотации и события

Release annotations: авто-добавление события при деплое (версия, автор, канареечный вес).
Incident/Freeze: отметки начала/конца инцидента и окна заморозки релизов.
Бизнес-события: крупные кампании/турниры — помечайте на графиках.

7) Алерты в Grafana

Alert rules централизованно (на базисе Prometheus/Loki/Cloud).
Contact points: PagerDuty/Slack/Email; Notification policies (рутинг по папке/тегам).
Multi-window burn-rate: быстрая и медленная прожарка бюджета.
Silences: в плановые окна и при дубликатах.

Пример выражения для p95:
promql histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket{service="$service"}[5m]))
) > 0. 25

8) Провижининг как код (IaC)

Храните источники/дашборды/алерты в Git.

datasource.yaml

yaml apiVersion: 1 datasources:
- name: Prometheus type: prometheus access: proxy url: http://prometheus:9090 isDefault: true
- name: Loki type: loki url: http://loki:3100
- name: Tempo type: tempo url: http://tempo:3100

dashboard.yaml

yaml apiVersion: 1 providers:
- name: sres folder: SRE type: file disableDeletion: false options:
path: /var/lib/grafana/dashboards/sre

grafana.ini (фрагмент)

ini
[auth]
disable_login_form = false
[users]
viewers_can_edit = false
[alerting]
enabled = true
[unified_alerting. screenshots]
capture = true

9) Безопасность и доступ

SSO (OIDC/SAML), группы → роли → папки.
Права на datasources: только нужным папкам, read-only для Viewer.
PII-гигиена: не тянуть поля с PII в панели; для логов — фильтруйте/маскируйте.
Секреты: только через Vault/secure JSON fields, без «плэйн-текста» в дашбордах.

10) Производительность и стоимость

Recording rules в Prometheus для тяжелых выражений.
Downsampling/Retention в бэкендах длительного хранения.
Кэш дашбордов и честные интервалы (не «1s» везде).
Ограничение кардинальности переменных (не подставляйте `user_id`/`session_id`).
Перераспределение: отдельные инстансы/фолдеры для шумных команд.

11) Специализированные дашборды для iGaming

Payments: попытки/успех/TTW p95, ошибка по PSP/маршруту, гео-карта отклонений.
Games/Providers: latency и error-rate по студиям/играм, конверсия запуска.
Risk/Fraud: скорость действий, всплески устройств/IP, корреляции (таблица + бар-гейдж).
RG/Compliance: сессии > порога, рост стейков, алерты по аномалиям.
Release Compare: стабильная vs канареечная по p95/error/бизнес-метрикам.
Infra/USE: Utilization/Saturation/Errors по кластерам и очередям.

12) Пример JSON-дашборда (фрагмент)

json
{
"title": "Payments SLO",
"tags": ["slo","payments"],
"time": {"from":"now-6h","to":"now"},
"panels": [
{
"type":"stat",
"title":"Availability",
"targets":[{"expr":"sum(rate(http_requests_total{service=\"payments-api\",status=~\"2..    3..\"}[5m]))/sum(rate(http_requests_total{service=\"payments-api\"}[5m]))"}],
"thresholds":{"mode":"absolute","steps":[{"color":"red","value":0},{"color":"green","value":0. 999}]}
},
{
"type":"timeseries",
"title":"p95 latency",
"exemplars": {"color":"rgba(31,120,193,0. 6)"},
"targets":[{"expr":"histogram_quantile(0. 95,sum by (le) (rate(http_request_duration_seconds_bucket{service=\"payments-api\"}[5m])))"}]
}
]
}

13) Runbooks и UX-улучшения

Каждому алерту — Runbook URL (инструкция действий).
Links на связанные дашборды (Payments ↔ Infra ↔ PSP).
Drilldown: клики по меткам → фильтры (region/psp/route).
Variables defaults: `env=prod`, `region=eu` — ускоряет старт.

14) Чек-лист внедрения

1. Настройте datasources: Prometheus/Loki/Tempo/SQL.
2. Введите папки и RBAC; аудит прав.
3. Создайте шаблонные переменные (region/env/service).
4. Постройте SLO-дашборды (availability, p95, error-rate, бюджет ошибок).
5. Добавьте аннотации релизов и сравнение stable/canary.
6. Включите exemplars и переход к трассам/логам по клику.
7. Настройте алерты (multi-window burn-rate) и рутинг.
8. Провизионьте все как код, храните в Git, делайте ревью.
9. Оптимизируйте производительность: recording rules, интервалы, кэш.
10. Введите бизнес-дашборды (TTW, конверсия платежей, GGR-карточки).

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

«Зоопарк» несогласованных дашбордов без переменных и стандартов.
Панели с тяжелыми PromQL без recording rules → медленный UI.
Переизбыток цветов/легенд/ось-Y с разными шкалами.
Подключение PII в панели, открытые для Viewer.
Отсутствие аннотаций релизов — непонятно, откуда скачки.
Один «моновью» дашборд вместо фолдерной структуры.

Итоги

Grafana — интерфейс, где техника встречается с продуктом: метрики, логи и трассы соединяются с бизнес-картинами. Шаблоны, корректные панели, аннотации и алерты превращают данные в решения: быстрый диагноз, предсказуемые релизы и управляемая стоимость наблюдаемости.

Contact

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

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

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

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

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

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