Dashboards customizados no Grafana
Importar dashboards prontos é o começo, mas as métricas mais valiosas são as da sua aplicação — e para essas você precisa criar painéis customizados. Grafana tem um editor visual poderoso para PromQL, templates dinâmicos com variáveis e suporte a annotations para correlacionar eventos (deploys, incidentes) com métricas.
Anatomia de um dashboard Grafana
Entenda a estrutura antes de criar:
# Hierarquia do Grafana:
# Organization → Folder → Dashboard → Row → Panel
# Dashboard: conjunto de painéis com timerange compartilhado
# Row: agrupador visual (colapsável)
# Panel: visualização individual (gráfico, tabela, stat, gauge, etc.)
# Tipos de painel mais usados:
# Time series: gráfico de linha/área — bom para métricas ao longo do tempo
# Stat: valor único grande — uptime, total de usuários, latência atual
# Gauge: medidor semicircular — CPU%, uso de memória
# Bar chart: comparação entre categorias — requests por endpoint
# Table: dados tabulares — lista de containers com métricas
# Heatmap: distribuição ao longo do tempo — histograma de latência
# Logs: painel de logs Loki — correlacionado com métricas
# Criação: Dashboards → New → New Dashboard → Add visualizationVariáveis de template para dashboards dinâmicos
Variáveis permitem filtrar o dashboard por instância, serviço ou ambiente sem duplicar painéis:
# Dashboard Settings → Variables → Add variable
# Variável de tipo "Query" — lista instâncias disponíveis no Prometheus:
# Name: instance
# Type: Query
# Datasource: Prometheus
# Query: label_values(node_uname_info, instance)
# Multi-value: true (selecionar múltiplas)
# Include All option: true
# Uso nos painéis (filtra pela instância selecionada):
node_memory_MemAvailable_bytes{instance="$instance"}
# Com multi-value: {instance=~"$instance"}
# Outros tipos úteis:
# Interval: variável de intervalo de tempo ($__interval)
# Custom: lista fixa (prod, staging, dev)
# Textbox: input livreCriar painel de latência percentil
Dashboard de latência com P50, P95 e P99 — o mais importante para APIs:
# Panel: Latência de Requisições HTTP
# Tipo: Time series
# Queries:
# A: P50 (mediana)
histogram_quantile(0.50,
sum(rate(http_request_duration_seconds_bucket{instance="$instance"}[$__rate_interval]))
by (le, route)
)
# B: P95
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket{instance="$instance"}[$__rate_interval]))
by (le, route)
)
# C: P99
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{instance="$instance"}[$__rate_interval]))
by (le, route)
)
# Configurações do painel:
# Unit: seconds (s)
# Min: 0
# Thresholds: 0.2s = verde, 0.5s = amarelo, 1s = vermelho
# Legend: {{route}} P{{ ... }}Annotations: marcar eventos no dashboard
Annotations adicionam marcações verticais no gráfico para correlacionar deploys e incidentes com métricas:
# Tipo 1: Annotation manual via UI
# Dashboard → Annotation marks → Add annotation
# Clique no gráfico → Add annotation
# Tipo 2: Annotation via API (ideal para deploys automatizados)
# No script de deploy:
curl -X POST http://localhost:3000/api/annotations \
-H "Content-Type: application/json" \
-u admin:senha \
-d "{
\"dashboardId\": 1,
\"time\": $(date +%s)000,
\"tags\": [\"deploy\", \"v2.1.0\"],
\"text\": \"Deploy v2.1.0 — $(git log -1 --pretty=%s)\"
}"
# Tipo 3: Annotation baseada em alerta
# Dashboard Settings → Annotations → Add annotation query:
# Datasource: Prometheus
# Expr: ALERTS{alertname="HighCPU", alertstate="firing"}
# Isso mostra quando o alerta ficou ativo no gráficoExportar dashboard como JSON (versionamento)
Versione dashboards no git como código — evita perda de configuração:
# Exportar dashboard via API
DASHBOARD_UID="meu_dashboard_uid"
curl http://localhost:3000/api/dashboards/uid/$DASHBOARD_UID \
-u admin:senha | python3 -m json.tool > dashboards/minha-api.json
# Script para exportar todos os dashboards:
for uid in $(curl -s http://localhost:3000/api/search -u admin:senha | python3 -c "import sys,json; [print(d['uid']) for d in json.load(sys.stdin)]"); do
curl -s http://localhost:3000/api/dashboards/uid/$uid -u admin:senha > dashboards/$uid.json
done
# Importar dashboard do arquivo (restore ou novo ambiente):
curl -X POST http://localhost:3000/api/dashboards/import \
-H "Content-Type: application/json" \
-u admin:senha \
-d @dashboards/minha-api.json
# Provisioning automático: monte /etc/grafana/provisioning/dashboards/
# e configure dashboard.yaml para carregar JSONs automaticamente$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.