Grafana e visualização de dados
(Secção Tecnologia e Infraestrutura)
Resumo curto
Grafana é a vitrine de toda a observabilidade - métricas, logs, traçados, indicadores de negócios e alertas em um único lugar. Para iGaming, isto é: monitoramento p95/p99, conversão de pagamentos, Time-to-Wallet, disponibilidade de provedores de jogos, geo-distribuição de incidentes e comparação de lançamentos (stable vs canary). Sucesso: modelos (variáveis), painéis compreensíveis, anotações de lançamento, dashboard SLO e disciplina de permissões.
1) Arquitetura de conexões
Datasources: Prometheus (métricas), Loki/ELK (logs), Tempo/Jaeger (trailers), ClickHouse/BigQuery/PG (dados de negócios), OTLP via Gateway.
Ligações-chave: a partir da métrica → excemplar → trace → logs relacionados por 'trace _ id'.
Pastas e RBAC: pastas individuais 'SRE', 'Payments', 'Risk', 'Games', 'BizOps'; роли `Viewer/Editor/Admin` и granular permissions.
2) Design de dashboards: princípios
1. A resposta para a pergunta é 1-2 clique, do cartão SLO aos detalhes.
2. RED/USE para cada serviço + cartões de domínio (TTW, conversão de depósitos).
3. Malha estável: 24 invertebrados, grandes KPI em cima, peças em baixo.
4. Cores e liminares: mínimo, apenas SLA/SLO.
5. Anotações de lançamento: Git SHA, versão, tipo de lançamento (canary/blue-green).
3) Variáveis e templos (templating)
As variáveis transformam um dashboard em muito.
Exemplo (Prometheus query-variável):- Name: `service`
- Query: `label_values(up, service)`
- Multi-select + incluído all - conveniente para as unidades.
- `region` → `env` → `service` → `instance`.
- Use 'regex '/' sort' para UX e 'refresh: On dashboard load'.
4) Painéis e tipos de visualização
Time series: p50/p95/p99, error-rate, throughput.
Stat/Gauge: KPI de destino (availability, TTW p95).
Bar Gaúge/Mesa: top-N rotas/PSP/provedores de jogos.
Geomap: mapas térmicos de incidentes/latência por país/RR.
Canvas: Fluxo de esquema (Player → API → PSP → Bank).
Node graph: Dependências de serviços, coloração por erro.
- Labels to fields, Outer join (pente de métricas e tabelas de negócios), Reduce (min/max/avg), Add field from calculation (conversão).
5) Exemplos de consultas e painéis
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 Solicitações de sucesso (SLO proxy)
promql sum(rate(http_requests_total{service="$service",status=~"2.. 3.."}[5m]))
/
sum(rate(http_requests_total{service="$service"}[5m]))
5. 3 Conversão de pagamentos (unidade 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 rápido na pista (exemplars)
No painel «Time series», inclua o Exemplars → clique no ponto de → abre o Tempo com 'trace _ id'.
5. 5 Logs por trace _ id (Loki)
logql
{service="$service"} = "$traceID"
6) Anotações e eventos
Release anotações: adição automática de evento durante o pouso (versão, autor, peso canário).
Invident/Freeze: marca o início/fim do incidente e janelas de congelamento de lançamentos.
Eventos de negócios: grandes campanhas/torneios - assinale nos gráficos.
7) Alertas em Grafana
Alert rulas é centralizado (baseado em Prometheus/Loki/Cloud).
Contact points: PagerDuty/Slack/Email; Notification policies (roting por pasta/formatação).
Multi-window burn-rate: um orçamento rápido e lento.
Silências: em janelas programadas e duplicadas.
promql histogram_quantile(0. 95,
sum by (le, service) (rate(http_request_duration_seconds_bucket{service="$service"}[5m]))
) > 0. 25
8) Mantimentos como código (IaC)
Guarde as fontes/dashboards/alertas em 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 (fatia)
ini
[auth]
disable_login_form = false
[users]
viewers_can_edit = false
[alerting]
enabled = true
[unified_alerting. screenshots]
capture = true
9) Segurança e acesso
SSO (OIDC/SAML), grupos → papéis → pastas.
Direitos de datasources: apenas as pastas desejadas, read-only para o Viewer.
Higiene PII: não puxar campos do PII no painel; para logs - filtre/disfarce.
Segredos: somente Vault/secure JSON fields, sem «plain-texto» em dashboards.
10) Desempenho e custo
Recording rulas em Prometheus para expressões pesadas.
Downsampling/Retenção em backends de armazenamento prolongado.
Dinheiro de dashboards e espaçamento honesto (não «1s» em todos os lugares).
Limite de variáveis cardinais (não insira 'user _ id '/' sessions _ id').
Redistribuição: instâncias individuais/folders para comandos ruidosos.
11) Dashboards especializados para iGaming
Payments: tentativas/sucesso/TTW p95, erro em PSP/rota, mapa geo de desvios.
Games/Providers: latency e error-rate para estúdios/jogos, conversão de lançamento.
Risk/Fraud: velocidade de ação, picos de dispositivos/IP, correlações (tabela + bar-gage).
RG/Compliance: sessões> limiar, crescimento de bifes, alertas por anomalias.
Release Compare: Canário estável vs p95/erro/métricas de negócios.
Infra/USE: Utilization/Saturation/Errors por clusters e filas.
12) Exemplo de JSON-dashbord (fragmento)
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 melhorias UX
Cada alerte é o Runbook URL (instrução de ação).
Links para dashboards relacionados (Payments ↔ Infra ↔ PSP).
Drilldown: cliques por rótulos → filtros (region/psp/rota).
Variáveis defaults: 'eng = prod', 'region = eu' - acelera a partida.
14) Folha de cheque de implementação
1. Configure datasources: Prometheus/Loki/Tempo/SQL.
2. Digite pastas e RBAC; auditoria de direitos.
3. Crie variáveis padrão (region/eng/service).
4. Construa dashboards SLO (availability, p95, error-rate, orçamento de erros).
5. Adicione anotações de lançamento e compare stable/canary.
6. Ative os exemplars e passe para as pistas/logs por clique.
7. Configure os alerts (multi-window burn-rate) e a rotina.
8. Providencie tudo como um código, guarde no Git, faça com ciúmes.
9. Otimize o desempenho: recording rales, intervalos, dinheiro.
10. Digite os cartões de negócios (TTW, conversão de pagamentos, cartões GGR).
15) Antipattern
«Zoológico» de dashboards incoerentes sem variáveis ou padrões.
Painéis com PromQL pesados sem recording rulas → UI lento.
Reaproveitamento de cores/lendas/eixo-Y com escalas diferentes.
Conexão PII em painéis abertos para o Viewer.
Sem anotações de lançamento, não se sabe de onde vêm as corridas.
Um dashboard monovel em vez de uma estrutura folder.
Resumo
Grafana é a interface onde a técnica se encontra com o produto - métricas, logs e pistas se conectam com quadros de negócios. Modelos, painéis corretos, anotações e alertas transformam os dados em soluções: diagnóstico rápido, lançamentos previsíveis e custo de observabilidade controlado.