Cover do episódio 156: Grafana + Prometheus: de 'não sei o que está acontecendo' para 'eu sei exatamente'
#15611 de julho, 20224 min leituraFerramentas que Eu UsoS6 · 2021–2022

Grafana + Prometheus: de 'não sei o que está acontecendo' para 'eu sei exatamente'

A diferença entre operar no escuro e ter visibilidade real do sistema. Como configurei meu primeiro stack de monitoramento de verdade — e o que aprendi no processo.

GrafanaPrometheusMonitoramentoObservabilidadeDevOps

Havia uma frase que eu repetia para mim mesmo antes de instalar o Prometheus: "acho que está funcionando." Não sabia se estava. Não tinha como saber.

Não tinha métricas de latência. Não tinha dashboard de erros. Não tinha alertas. Tinha tail -f num arquivo de log e intuição.


Prometheus e Grafana são ferramentas distintas com papéis complementares.

Prometheus é um banco de dados de séries temporais com sistema de coleta. Ele faz scraping das métricas que sua aplicação expõe (ou que um exporter expõe por ela), armazena, e permite queries com PromQL. Você pergunta: "qual foi a taxa de requests por segundo nos últimos 10 minutos, por rota?"

Grafana é a camada de visualização. Ele se conecta ao Prometheus (e a outros datasources) e permite criar dashboards — painéis com gráficos, tabelas, alertas — para visualizar o que o Prometheus está coletando.


O ponto de entrada mais fácil é o node_exporter para métricas de sistema (CPU, memória, disco) e adicionar um client do Prometheus na sua aplicação para métricas customizadas.

O client Python ou Go do Prometheus expõe um endpoint /metrics na sua aplicação. O Prometheus faz scraping desse endpoint a cada 15 segundos (configurável). Você define quais métricas quer coletar: counters (incrementam, nunca decrementam — bom para contar requests e erros), gauges (sobem e descem — bom para memória em uso e conexões ativas), histogramas (distribuição de valores — essencial para latência).


O primeiro dashboard que criei tinha quatro painéis: requests por segundo, taxa de erros (5xx como percentual do total), latência p99, e uso de CPU. Simples. Mas pela primeira vez eu conseguia abrir uma tela e ver o que estava acontecendo em tempo real.

A primeira coisa que aprendi olhando para esse dashboard: a latência p99 era muito pior do que a média. A latência média era 45ms. A p99 era 2.1 segundos. Um em cada cem requests estava levando 47x mais que a média — e sem o histograma, eu nunca saberia.

Isso levou a uma investigação que descobriu queries lentas no banco de dados que só aconteciam em condições específicas. O usuário médio não sentia. Mas 1% dos usuários estava tendo uma experiência ruim, e eu estava completamente cego para isso.


Alertas são onde Prometheus vira ferramenta operacional de verdade. Você define regras: "se a taxa de erros for maior que 5% por mais de 2 minutos, dispara alerta." Essas regras ficam em arquivos yaml, são versionadas junto com o código de infra, e o Prometheus evalua continuamente.

O Alertmanager recebe os alertas e roteia para onde você quiser: Slack, PagerDuty, email. Configurar isso não é difícil — mas calibrar os alertas é.

O erro comum de quem começa: criar alertas demais, com thresholds muito baixos. O resultado é alert fatigue — você recebe tantas notificações que começa a ignorar todas. Só alerta para o que realmente requer ação imediata. Para o resto, confia nos dashboards.


Grafana tem uma coleção pública de dashboards em grafana.com/grafana/dashboards. Para Node Exporter, Kubernetes, PostgreSQL, Nginx — existem dashboards prontos que você importa com um ID. Não precisa construir tudo do zero.

Mas os dashboards mais valiosos são os que você cria para as métricas do seu negócio. Quantos usuários ativos agora. Quantas transações processadas na última hora. Taxa de conversão por funil. Essas métricas não existem em dashboards públicos — você precisa instrumentar sua aplicação e criar os painéis.


A sensação de operar com visibilidade real é difícil de descrever para quem nunca teve. Você passa de "acho que está ok" para "eu sei que está ok — ou sei exatamente o que não está."

Essa semana: se você não tem nenhuma métrica instrumentada na sua aplicação, começa pelo mais simples: adiciona o client do Prometheus, expõe um counter de requests por rota e um counter de erros. Sobe o Prometheus e o Grafana com Docker Compose. Cria um dashboard com dois painéis. Isso já muda como você opera.