Grafana și vizualizarea datelor
(Secțiunea: Tehnologie și infrastructură)
Scurt rezumat
Grafana este o casetă de prezentare pentru toată observabilitatea: valori, busteni, urme, indicatori de afaceri și alerte într-un singur loc. Pentru iGaming, acestea sunt: monitorizarea p95/p99, conversia plăților, Time-to-Wallet, disponibilitatea furnizorului de jocuri, geo-distribuția incidentelor și stabil vs canar. Succes: șabloane (variabile), panouri ușor de înțeles, adnotări de lansare, tablouri de bord SLO și disciplina drepturi de acces.
1) Arhitectura conexiunii
Resurse de date: Prometheus (metrics), Loki/ELK (logs), Tempo/Jaeger (trails), ClickHouse/BigQuery/PG (business data), OTLP prin Gateway.
Link-uri cheie: din → exemplar → urme metrice → jurnalele legate de 'trace _ id'.
Dosare și RBAC: foldere separate "SRE", "Plăți", "Risc", "Jocuri", "BizOps'; роли 'Viewer/Editor/Admin' и permisiuni granulare.
2) Design tablou de bord: principii
1. Răspunsul la întrebarea din 1-2 clicuri: de la card SLO la detalii.
2. RED/UTILIZARE pentru fiecare serviciu + carduri de domeniu (TTW, conversie depozit).
3. Grilă stabilă: 24 coloane, KPI mare pe partea de sus, detalii pe partea de jos.
4. Culori și praguri: minim, numai SLA/SLO.
5. Adnotări de lansare: Git SHA, versiune, tip de lansare (canar/albastru-verde).
3) Variabile și șabloane (șablon)
Variabilele transformă un tablou de bord în multe.
Exemplu (Prometheus interogare-variabilă):- Denumire: 'service'
- Interogare: 'label _ values (up, service)'
- Multi-select + include toate - convenabil pentru agregate.
- „region” → „env” → „serviciu” → „instanţă”.
- Utilizați „regex ”/„ sort” pentru UX și „refresh: La încărcarea tabloului de bord”.
4) Panouri și tipuri de randare
Seria de timp: p50/p95/p99, rata de eroare, debit.
Stat/Ecartament: KPI țintă (disponibilitate, TTW p95).
Bar ecartament/masă: rutele de top N/PSP/furnizorii de jocuri.
Geomap: hărți termice/latență pe țări/ROR.
Canvas: fluxuri schematice (Player → API → PSP → Bank).
Nod grafic: dependențe de serviciu, colorare prin erori.
- Etichete în câmpuri, Îmbinare exterioară, Reducere (min/max/avg), Adăugare câmp din calcul (conversie).
5) Exemple de interogări și panouri
5. 1 p95 latență (PromQL)
promql histogram_quantile(0. 95,
sum by (le, route) (rate(http_request_duration_seconds_bucket{service="$service",region="$region"}[5m]))
)
5. 2 Succesul cererilor (proxy SLO)
promql sum(rate(http_requests_total{service="$service",status=~"2.. 3.."}[5m]))
/
sum(rate(http_requests_total{service="$service"}[5m]))
5. 3 Conversia plăților (agregat PromQL)
promql sum(rate(payments_success_total{psp=~"$psp",currency=~"$currency"}[15m]))
/
sum(rate(payments_attempt_total{psp=~"$psp",currency=~"$currency"}[15m]))
5. 4 Salt rapid în pistă (exemplare)
În panoul „Seria timp”, activați Examplars → făcând clic pe punctul → Tempo se deschide cu 'trace _ id'.
5. 5 Loki trace_id
logql
{service="$service"} = "$traceID"
6) Adnotări și evenimente
Adnotări de lansare: auto-adăugarea unui eveniment în timpul epuizării (versiune, autor, greutate canară).
Incident/Înghețare: Semnele de pornire/sfârșit incidente și eliberarea ferestrelor înghețate.
Evenimente de afaceri: campanii mari/turnee - marcați pe diagrame.
7) Alerte la Grafana
Reguli de alertă la nivel central (bazate pe Prometheus/Loki/Cloud).
Puncte de contact: PagerDuty/Slack/Email; Politici de notificare (înrădăcinare prin folder/tags).
Multi-fereastră arde-rata: rapid şi lent buget prăjire.
Tăceri: în ferestre programate și cu duplicate.
promql histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket{service="$service"}[5m]))
) > 0. 25
8) Alocarea ca cod (IaC)
Stocați surse/tablouri de bord/alerte în 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
tablou de bord. yaml
yaml apiVersion: 1 providers:
- name: sres folder: SRE type: file disableDeletion: false options:
path: /var/lib/grafana/dashboards/sre
grafana. ini (fragment)
ini
[auth]
disable_login_form = false
[users]
viewers_can_edit = false
[alerting]
enabled = true
[unified_alerting. screenshots]
capture = true
9) Securitate și acces
SSO (OIDC/SAML), grupuri → roluri → foldere.
Drepturi la resurse de date: numai dosarele necesare, numai pentru citire pentru Viewer.
Igiena PII: nu trageți câmpuri cu PII în panou; pentru jurnale - filtru/mască.
Secrete: numai prin câmpurile Vault/Secure JSON, fără „text simplu” în tablouri de bord.
10) Performanță și cost
Reguli de înregistrare în Prometheus pentru expresii grele.
Downsampling/retenție în backend-uri de stocare pe termen lung.
Cache tablou de bord și intervale echitabile (nu "1s' peste tot).
Restricționarea cardinalității variabilelor (nu înlocuiți 'user _ id'/' session _ id').
Redistribuire: instanțe/foldere separate pentru echipe zgomotoase.
11) Tablouri de bord specializate pentru iGaming
Plăți: încercări/succes/TTW p95, PSP/eroare de traseu, hartă geo-deviație.
Jocuri/Furnizori: latență și eroare prin studio/joc, conversie lansare.
Risc/Fraudă: viteză de acțiune, explozii de dispozitive/IP, corelații (tabel + bar-gage).
RG/Conformitate: sesiuni> praguri, cresterea fripturii, alerte de anomalie.
Release Compare: stabil vs canar by p95/error/business metrics.
Infra/UTILIZARE: Utilizare/Saturație/Erori de cluster și coadă.
12) Exemplu de tablou de bord JSON (fragment)
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 și îmbunătățiri UX
Fiecare alertă are un URL Runbook (instrucțiuni de acțiune).
Link-uri către tablourile de bord aferente (Plăți ↔ Infra ↔ PSP).
Drilldown: clicuri pe etichete → filtre (regiune/psp/traseu).
Variabilele implicite: 'env = prod', 'region = eu' - accelerează pornirea.
14) Lista de verificare a implementării
1. Configurați resursele de date: Prometheus/Loki/Tempo/SQL.
2. Introduceți dosare și RBAC; auditul drepturilor.
3. Creați variabile șablon (regiune/env/serviciu).
4. Construiți tablouri de bord SLO (disponibilitate, p95, rată de eroare, buget de eroare).
5. Adăugați adnotări de eliberare și comparații stabile/canare.
6. Activați exemplare și mergeți la urme/jurnale făcând clic.
7. Configurați alerte (multi-fereastră arde-rata) și înrădăcinare.
8. Furnizarea totul ca cod, magazin în Git, face o revizuire.
9. Optimizați performanța: reguli de înregistrare, intervale, memorie cache.
10. Introduceți tablouri de bord de afaceri (TTW, conversie de plată, carduri GGR).
15) Antipattern
„Zoo” tablouri de bord inconsistente, fără variabile și standarde.
Panouri cu PromQL grele, fără reguli de înregistrare → lent UI.
Supraabundenta de culori/legende/axa Y cu scale diferite.
Conexiune PII în panouri deschise pentru Viewer.
Lipsa adnotărilor de eliberare - nu este clar de unde provin salturile.
Un tablou de bord „monovew” în loc de o structură de foldere.
Rezumat
Grafana este interfața în care tehnica îndeplinește produsul: măsurători, jurnale și piese se conectează la imagini de afaceri. Șabloanele, panourile corecte, adnotările și alertele transformă datele în soluții: diagnostic rapid, eliberări previzibile și costuri de observabilitate ușor de gestionat.