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: теплові карти інцидентів/латентності по країнах/РОР.
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).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.