GH GambleHub

Grafana e visualizzazione dei dati

(Sezione Tecnologia e infrastruttura)

Breve riepilogo

Grafana è la vetrina dell'intera osservabilità: metriche, fogli, tracciati, prestazioni aziendali e alert in un unico luogo. Per i clienti sono: monitoraggio p95/p99, conversione dei pagamenti, Time-to-Wallet, disponibilità dei provider di giochi, geo-distribuzione degli incidenti e confronto dei lanci (stabile vs canary). Successo: modelli (variabili), pannelli comprensibili, annotazioni di rilascio, dashboard SLO e disciplina dei diritti di accesso.

1) Architettura di connessione

Datasources: Prometheus, Loki/ELK, Tempo/Jaeger, ClickHouse/BigQuery/PG, OTLP tramite Gateway.
Collegamenti chiave: dalla metrica trace i loghi collegati per «trace _ id».
Cartelle e RBAC: singole cartelle SRE, Payments, Risk, Games, BizOps; роли `Viewer/Editor/Admin` и granular permissions.

2) Design dashboard: principi

1. La risposta alla domanda per 1-2 clic è dalla scheda SLO ai dettagli.
2. RED/USE per ogni servizio + carte di dominio (TTW, conversione dei depositi).
3. Griglia stabile: ventiquattro, grandi KPI in alto, pezzi in basso.
4. Colori e soglie: minimo, solo SLA/SLO.
5. Annotazioni di rilascio: Git SHA, versione, tipo di rilascio (canary/blue-green).

3) Variabili e templati (templating)

Le variabili trasformano un dashboard in un sacco.

Esempio (Prometheus query-variabile):
  • Name: `service`
  • Query: `label_values(up, service)`
  • Multi-select + include all - utile per le unità.
Variabili a cascata:
  • `region` → `env` → `service` → `instance`.
  • Usa'regex '/' sort 'per e' refresh: On dashboard load '.

4) Pannelli e tipi di visualizzazione

Time series: p50/p95/p99, error-rate, throughput.
Stat/Gauge: KPI target (availability, TTW p95).
Bar gauge/Table: top n itinerari/PSP/provider di giochi.
Geomap: mappe termiche degli incidenti/latitanza per paese/RR.
Canves: flusso schematico (Player → API → PSP → Bank).
Node graph: dipendenze dei servizi, colorazione degli errori.

Trasformazioni:
  • Labels to fields, Outer join (pendenza di metriche e tabelle aziendali), Reduce (min/max/avg), Add field from calculation (conversione).

5) Esempi di query e pannelli

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 Successo query (SLO proxy)

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

5. 3 Conversione dei pagamenti (unità PromQL)

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

5. 4 Salto veloce in pista (exemplars)

Nel pannello «Time series», attivare il click → s su un punto del → si apre Tempo con'trace _ id '.

5. 5 Logi trace _ id (Loki)

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

6) Annotazioni ed eventi

Release annotations - Aggiunta automatica di un evento in fase di depistaggio (versione, autore, peso canareo).
Invident/Freeze - Segni di inizio/fine dell'incidente e finestre di congelamento dei rilasci.
Eventi aziendali: grandi campagne/tornei - contrassegna sui grafici.

7) Alert in Grafana

Alert rule è centralizzato (sulla base Prometheus/Loki/Cloud).
Contact points: PagerDuty/Slack/Email; Notifica policies (routing per cartella/tag).
Multi-window burn-rate è un budget veloce e lento.
Silences - Nelle finestre pianificate e duplicate.

Esempio di espressione per p95:
promql histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket{service="$service"}[5m]))
) > 0. 25

8) Providining come codice (IaC)

Tenete le fonti/dashboard/alert al 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 (sezione)

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

9) Sicurezza e accesso

SSO (OIDC/SAML), gruppi che → il ruolo della cartella →.
Diritti datasources: solo le cartelle desiderate, read-only per Viewer.
Igiene PII: non trascinare i campi dal PII nel pannello; per i loghi - filtra/maschera.
I segreti sono solo tramite Vault/secure JSON fields, senza «plain-text» in dashboard.

10) Prestazioni e costi

Recording rule in Prometheus per espressioni pesanti.
Downsampling/Retention in backend di conservazione a lungo termine.
Cache dashboard e intervalli onesti (non «1s» ovunque).
Vincola la radicalità delle variabili (non sovrascrivere «user _ id »/« sessions _ id»).
Ridistribuzione: istanze/folder separate per comandi rumorosi.

11) Dashboard specializzati per il iGaming

Payments: tentativo/successo/TTW p95, errore PSP/percorso, geo-mappe di deviazione.
Games/Providers: latency e error-rate per studio/gioco, conversione di avvio.
Risk/Fraud: velocità di azione, picchi di periferiche/IP, correlazioni (tabella + bar-gage).
RG/Compliance: sessioni> soglia, altezza bistecche, alert per anomalie.
Release Compare: stabile vs canareccio da p95/errore/metriche aziendali.
Infra/USE: Utilization/Saturation/Errors per cluster e code.

12) Esempio di JSON-dashbord (frammento)

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 e miglioramenti UX

Ogni alert è un URL Runbook.
Links ai dashboard collegati (Payments d'Infra PSP).
Drilldown: click su etichette filtri → (region/psp/route).
Variabili defaults: 'ev = prod', 'region = eu' - accelera l'avvio.

14) Assegno foglio di implementazione

1. Configura i datasources: Prometheus/Loki/Tempo/SQL.
2. Immettere cartelle e RBAC; Controllo dei diritti.
3. Creare variabili modello (region/eng/service).
4. Costruisci i dashboard SLO (availability, p95, errato-rate, bilancio degli errori).
5. Aggiungete le annotazioni di release e il confronto stabile/canary.
6. Attivare exemplars e passare a piste/logi click.
7. Regolare gli alert (multi-window burn-rate) e il rooting.
8. Provvedi come un codice, conserva in Git, faccia la gelosia.
9. Ottimizzare le prestazioni: recording rule, intervalli, cache.
10. Immettere i dashboard aziendali (TTW, conversione dei pagamenti, carte GGR).

15) Antipattern

«Zoo» di dashboard incoerenti, senza variabili o standard.
I pannelli con pesanti senza recording rule sono lenti.
Rielaborazione di colori/leggende/asse-Y con diverse scala.
Connessione PII nei pannelli aperti per Viewer.
L'assenza di annotazioni di rilascio non è chiara.
Un monovolume al posto della struttura folder.

Riepilogo

Grafana è l'interfaccia in cui la tecnica incontra il prodotto: metriche, logge e piste si collegano ai quadri aziendali. Modelli, pannelli corretti, annotazioni e alert trasformano i dati in soluzioni: diagnosi rapida, rilasci prevedibili e costi di osservazione controllati.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Telegram
@Gamble_GC
Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.