GH GambleHub

Grafana et visualisation des données

(Section : Technologie et infrastructure)

Résumé succinct

Grafana est la vitrine de toute observabilité : métriques, logs, tracés, indicateurs commerciaux et alertes au même endroit. Pour iGaming, il s'agit du suivi p95/p99, de la conversion des paiements, du Time-to-Wallet, de la disponibilité des fournisseurs de jeux, de la géo-distribution des incidents et de la comparaison des sorties (stable vs canary). Succès : modèles (variables), panneaux compréhensibles, annotations de sortie, SLO-dashboards et discipline des droits d'accès.

1) Architecture de connexion

Datasours : Prometheus (métriques), Loki/ELK (logs), Tempo/Jaeger (tracks), ClickHouse/BigQuery/PG (données d'entreprise), OTLP via Gateway.
Liens clés : à partir de la métrique → exemplar → trace → logs liés par 'trace _ id'.
Dossiers et RBAC : dossiers distincts 'SRE', 'Payments', 'Risk', 'Games', 'BizOps' ; роли `Viewer/Editor/Admin` и granular permissions.

2) Conception de dashboards : principes

1. Réponse à la question en 1-2 clics : de la carte SLO aux détails.
2. RED/USE pour chaque service + cartes de domaine (TTW, conversion des dépôts).
3. Grille stable : 24 colonnes, grands KPI en haut, détails en bas.
4. Couleurs et seuils : minimum, seulement par SLA/SLO.
5. Annotations de sortie : Git SHA, version, type de sortie (canary/blue-green).

3) Variables et templates (templating)

Les variables transforment un dashboard en beaucoup.

Exemple (Prometheus query-variable) :
  • Name: `service`
  • Query: `label_values(up, service)`
  • Multi-select + include all - pratique pour les agrégats.
Variables en cascade :
  • `region` → `env` → `service` → `instance`.
  • Utilisez 'regex '/' sort' pour UX et 'refresh : On dashboard load'.

4) Panneaux et types de visualisation

Time series: p50/p95/p99, error-rate, throughput.
Stat/Gauge : objectifs KPI (disponibilité, TTW p95).
Bar gauge/Table : top N itinéraires/PSP/fournisseurs de jeux.
Geomap : cartes thermiques des incidents/latences par pays/RR.
Canvas : flux schématiques (Player → API → PSP → Bank).
Node graphique : dépendances des services, coloration par erreur.

Transformations :
  • Labels to fields, Outer join (métriques et tableaux d'entreprise), Reduce (min/max/avg), Add field from calculation (conversion).

5) Exemples de demandes et de panneaux

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 Succès des demandes (SLO proxy)

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

5. 3 Conversion des paiements (agrégat BouQL)

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

5. 4 Sauts rapides sur piste (exemples)

Dans le panneau Time Series, activez Exemplars → cliquez sur un point → Tempo s'ouvre avec trace _ id.

5. 5 Logs par trace_id (Loki)

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

6) Annotations et événements

Release annotations : auto-ajout de l'événement à la sortie (version, auteur, poids canarien).
Incident/Freeze : marques de début/fin de l'incident et fenêtres de gel des versions.
Événements d'affaires : grandes campagnes/tournois - marquer sur les graphiques.

7) Alerte en Grafana

Alert rules centralement (sur la base Prometheus/Loki/Cloud).
Contact points: PagerDuty/Slack/Email; Notifications politiques (routage par dossier/balises).
Multi-window burn-rate : un budget rapide et lent.
Silences : dans les fenêtres de planification et en double.

Exemple d'expression pour p95 :
promql histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket{service="$service"}[5m]))
) > 0. 25

8) Provijining en tant que code (IaC)

Stockez les sources/dashboards/alertes dans 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 (fragment)

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

9) Sécurité et accès

SSO (OIDC/SAML), les groupes → le rôle du dossier →.
Droits sur datasources : uniquement les dossiers nécessaires, read-only pour Viewer.
Hygiène PII : ne pas tirer les champs avec PII dans le panneau ; pour les logs - filtrer/masquer.
Secrets : seulement via Vault/secure JSON fields, sans « plaine texte » dans les dashboards.

10) Performance et coût

Règles d'enregistrement dans Prometheus pour les expressions lourdes.
Downsampling/Retraite dans les backends de stockage de longue durée.
Cache de dashboards et intervalles honnêtes (pas "1s'partout).
Limitation de la cardinalité des variables (ne pas substituer 'user _ id '/' session _ id').
Redistribution : instances individuelles/fauteurs pour les équipes bruyantes.

11) Dashboards spécialisés pour iGaming

Payments : tentatives/succès/TTW p95, erreur PSP/route, carte géographique des écarts.
Games/Providers : latency et error rate par studio/jeux, conversion de lancement.
Risk/Fraud : taux d'action, surtensions des appareils/IP, corrélations (tableau + barre gage).
RG/Conformité : sessions> seuil, croissance des steaks, alertes sur les anomalies.
Release Compare : Stable vs Canaries par p95/error/business métriques.
Infra/USE : Utilisation/Saturation/Errors par clusters et files d'attente.

12) Exemple de dashboard 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 et améliorations UX

Chaque alerte est une URL Runbook (instruction d'action).
Liens vers les dashboards associés (Payments ↔ Infra ↔ PSP).
Drilldown : clics par étiquette → filtres (région/psp/route).
Variables defaults : "bou = prod'," region = eu "- accélère le départ.

14) Chèque de mise en œuvre

1. Configurez datasources : Prometheus/Loki/Tempo/SQL.
2. Entrez les dossiers et RBAC ; audit des droits.
3. Créez des variables de modèle (region/bou/service).
4. Construisez des SLO-dashboards (availability, p95, error-rate, budget des erreurs).
5. Ajoutez des annotations de version et une comparaison stable/canary.
6. Activez exemplars et accédez aux pistes/logs en cliquant.
7. Configurez les alerts (multi-window burn-rate) et le routing.
8. Provisionnez tout comme le code, stockez-le dans Git, faites la rhubarbe.
9. Optimisez les performances : règles d'enregistrement, intervalles, cache.
10. Entrez les cartes d'affaires (TTW, conversion de paiement, GGR).

15) Anti-modèles

Le « zoo » des dashboards incohérents sans variables ni normes.
Les panneaux avec le BouQL lourd sans règles d'enregistrement → lent UI.
Excès de couleurs/légendes/axe-Y avec différentes échelles.
Connexion PII dans les panneaux ouverts pour Viewer.
L'absence d'annotations de sortie - on ne sait pas d'où viennent les sauts.
Un dashboard au lieu d'une structure folder.

Résultats

Grafana est l'interface où la technique rencontre le produit : les métriques, les logs et les pistes se connectent aux tableaux d'affaires. Les modèles, les panneaux corrects, les annotations et les alertes transforment les données en solutions : diagnostic rapide, sorties prévisibles et coûts d'observation gérables.

Contact

Prendre contact

Contactez-nous pour toute question ou demande d’assistance.Nous sommes toujours prêts à vous aider !

Telegram
@Gamble_GC
Commencer l’intégration

L’Email est obligatoire. Telegram ou WhatsApp — optionnels.

Votre nom optionnel
Email optionnel
Objet optionnel
Message optionnel
Telegram optionnel
@
Si vous indiquez Telegram — nous vous répondrons aussi là-bas.
WhatsApp optionnel
Format : +code pays et numéro (ex. +33XXXXXXXXX).

En cliquant sur ce bouton, vous acceptez le traitement de vos données.