0 XP
Módulo 10 · Observabilidade e SRE

Grafana e Loki: dashboards e logs centralizados

Intermediário 45 min+25 XPGrafanaLokiLogQL

Objetivos desta aula

  • Construir dashboard que responde perguntas
  • Consultar logs com LogQL
  • Correlacionar métrica e log

Dashboard não é galeria de gráficos: é ferramenta de decisão. O primeiro painel responde 'está tudo bem?' com taxa de erro, p95 e throughput. Os seguintes ajudam a localizar o problema: por rota, por dependência, por recurso. Se um painel nunca é usado em incidente, ele só ocupa espaço.

Loki indexa labels e guarda o conteúdo comprimido, o que o torna barato e integrado ao mesmo modelo de labels do Prometheus. Com LogQL você filtra por stream e por conteúdo, extrai campos de JSON e até gera métricas a partir de logs.

O ganho maior é correlação: do painel de latência, ir para os logs daquele intervalo e serviço em dois cliques. Padronizar log estruturado com requestId e traceId é o que permite fechar o ciclo métrica → log → trace.

1. Dashboard que ajuda num incidente

Topo: os sinais de ouro do serviço. Meio: dependências (banco, fila, gateway de pagamento). Base: recursos (CPU, memória, Pods). Quem abre às 3h da manhã precisa entender em 10 segundos se o problema é aqui.

2. Variáveis e dashboards como código

Variáveis ($namespace, $service) evitam um painel por serviço. Guarde os dashboards em JSON no Git e provisione por ConfigMap ou Terraform — sem cliques perdidos.

3. Loki: logs baratos

O Loki indexa só labels (namespace, app), não o texto — por isso é barato. Promtail ou o Grafana Alloy coletam os logs dos nós. A consulta LogQL filtra por labels e depois pelo conteúdo.

4. Da métrica ao log

Ao ver um pico de erro no gráfico, clique e abra os logs do mesmo intervalo e serviço; com trace_id no log, pule direto para o trace no Tempo.

Na prática

Consultas LogQL

logql

{app="cloudshop", component="api"} |= "ERROR"

{app="cloudshop"} | json | status >= 500 | line_format "{{.route}} {{.message}}"

# taxa de erro derivada de log
sum(rate({app="cloudshop"} | json | status >= 500 [5m]))

# rastrear uma requisicao especifica
{app="cloudshop"} | json | requestId = "7f3c1a"

# duracao acima de 1s
{app="cloudshop"} | json | duration_ms > 1000

Log estruturado na aplicação

javascript

function log(level, message, extra = {}) {
  process.stdout.write(JSON.stringify({
    ts: new Date().toISOString(),
    level,
    service: "cloudshop-api",
    message,
    ...extra,           // requestId, route, status, duration_ms, traceId
  }) + "\n");
}

// nunca inclua: senha, token, cookie, dado de pagamento
log("info", "pedido criado", { requestId, route: "/orders", status: 201, duration_ms: 84 });

Nota de segurança: Mantenha uma lista de campos proibidos e um teste automatizado que falha se algum deles aparecer no log.

LogQL: encontrar e contar erros

logql

{namespace="cloudshop", app="api"} |= "error"
{app="api"} | json | status >= 500 | line_format "{{.route}} {{.msg}}"
sum by (route) (count_over_time({app="api"} | json | status >= 500 [5m]))

Por que isso importa

Em incidente, o tempo gasto procurando log é tempo de indisponibilidade.

Erro comum

Dashboard com quarenta painéis onde ninguém encontra o que importa.

Dica de produção

Coloque o painel de SLO no topo e o runbook linkado na descrição do dashboard.

Alerta de segurança

Log centralizado concentra dados sensíveis: defina retenção e controle de acesso.

Pergunta de entrevista

Como você correlaciona um pico de latência com os logs correspondentes?

Glossário

LogQL
Linguagem de consulta do Loki, inspirada em PromQL.
log estruturado
Log emitido como objeto (JSON) com campos consultáveis.
Loki
Sistema de logs que indexa apenas labels, reduzindo custo.
LogQL
Linguagem de consulta de logs do Loki.
Provisioning
Carregar dashboards e fontes de dados a partir de arquivos versionados.

Conexão com o CloudShop

Criar o dashboard principal do CloudShop com SLO, RED e link para logs.

Quiz da aula

  1. 1. Qual campo é essencial para correlacionar log com trace?

  2. 2. Por que o Loki é mais barato que soluções que indexam todo o texto?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima