Prometheus observabilidade: guia passo a passo para configurar
Quer monitorar seus serviços sem depender de ferramentas caras? Este guia mostra como configurar observabilidade com Prometheus, do básico ao alerta, com dicas para evitar erros comuns.
Quer monitorar seus serviços sem depender de ferramentas caras? Este guia mostra como configurar observabilidade com Prometheus, do básico ao alerta, com dicas para evitar erros comuns.
Guia passo a passo para configurar observabilidade com Prometheus
Configurar observabilidade com Prometheus significa transformar logs e sinais em métricas acionáveis. Ao final deste guia, você terá um servidor coletando métricas de um alvo real, com uma consulta funcional e um alerta básico. Os pré-requisitos são simples: acesso a um terminal Linux, Docker instalado e um serviço HTTP qualquer para monitorar (pode ser uma API local).
Passo 1: Instale o Prometheus
Baixe a versão estável mais recente do site oficial (prometheus.io) ou use a imagem Docker. Em um ambiente de teste, o caminho rápido é:
docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
Confirme se a interface web abriu em localhost:9090. Se a página não carregar, verifique se a porta não está ocupada e se o volume montou o arquivo correto. Um erro comum é esquecer o -v e rodar sem configuração, o que limita a coleta ao próprio Prometheus.
Passo 2: Defina os alvos de coleta
Crie o arquivo prometheus.yml com a lista de alvos. O exemplo abaixo monitora o próprio Prometheus e um serviço fictício na porta 8080:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'meu-servico'
static_configs:
- targets: ['localhost:8080']
Para cada alvo, o Prometheus faz um HTTP GET em /metrics. Se o serviço não expõe métricas nesse endpoint, ele aparecerá como DOWN. Use a página de Targets em localhost:9090/targets para conferir o estado. Dica: comece com um alvo simples, como o próprio Prometheus, antes de adicionar serviços complexos.
Passo 3: Exponha métricas no seu serviço
Se o serviço for uma aplicação própria, adicione uma biblioteca cliente, como prometheus_client para Python ou micrometer para Java. O endpoint /metrics deve retornar texto simples com métricas no formato Prometheus, por exemplo:
http_requests_total{method="get",code="200"} 1027
Um erro comum é expor métricas em formato incompatível, como JSON. O Prometheus espera o formato de texto plano com linhas nome{label="valor"} número. Valide a saída com curl http://localhost:8080/metrics antes de configurar o scrape.
Passo 4: Consulte métricas com PromQL
Na interface web, vá para a aba "Graph" e escreva uma consulta. Por exemplo, para ver a taxa de requisições por segundo:
rate(http_requests_total[5m])
PromQL é a linguagem de consulta do Prometheus. Ela permite filtrar por labels, calcular taxas e agregar dados. Teste consultas simples antes de avançar para alertas. Um erro comum é usar rate em um contador que ainda não tem pelo menos dois pontos de coleta, o que retorna valor vazio.
Passo 5: Configure alertas no Alertmanager
Alertas são definidos em regras dentro do Prometheus. Crie um arquivo alerts.yml:
groups:
- name: exemplo
rules:
- alert: ServicoFora
expr: up == 0 for: 1m labels: severity: critical annotations: summary: "Serviço fora do ar"
Referencie esse arquivo no prometheus.yml e reinicie o serviço. O Alertmanager cuida do envio de notificações, mas para o teste inicial basta ver o alerta na aba "Alerts". Não configure notificações antes de validar a regra, pois erros de sintaxe impedem a regra de carregar.
Passo 6: Visualize com Grafana
O Grafana conecta-se ao Prometheus como fonte de dados. Adicione a URL http://localhost:9090 e crie um painel com um gráfico simples. Um erro comum é usar a query errada ou esquecer de configurar o intervalo de tempo. Importe um dashboard pronto da comunidade para acelerar, mas revise as métricas para garantir que fazem sentido para o seu caso.
Checklist final
- [ ] Servidor Prometheus rodando na porta 9090
- [ ] Pelo menos um alvo aparecendo como
UPem Targets - [ ] Endpoint
/metricsexposto no serviço monitorado - [ ] Uma consulta PromQL retornando dados
- [ ] Uma regra de alerta carregada sem erros
- [ ] Grafana conectado e exibindo um gráfico
Com isso, você tem o ciclo básico de observabilidade funcionando. O próximo passo é explorar exporters prontos, como node_exporter para métricas de servidor, e pensar em quais métricas de negócio valem a pena acompanhar.
FAQ
O que é observabilidade em Prometheus?
Observabilidade é a capacidade de entender o estado interno de um sistema por meio de métricas, logs e rastreamentos. O Prometheus foca em métricas: ele coleta, armazena e consulta séries temporais, permitindo detectar problemas como picos de latência ou quedas de serviço.
Quais são os principais componentes do Prometheus?
O servidor Prometheus coleta e armazena métricas. O Alertmanager processa alertas enviados pelo servidor. Exporters expõem métricas de sistemas que não falam nativamente o formato. O Grafana é opcional, mas comum, para visualização.
Como o Prometheus se compara a outras ferramentas?
Diferente de soluções completas como Datadog, o Prometheus é open source e exige mais configuração manual. Em contrapartida, oferece modelo de dados dimensional e PromQL, uma linguagem de consulta flexível. Ele é bem adaptado para ambientes Kubernetes e microsserviços.
Preciso usar Docker para instalar o Prometheus?
Não. O Docker facilita o teste, mas você pode baixar o binário direto do site oficial e rodar como um processo comum. A escolha depende do seu ambiente: em produção, Kubernetes ou systemd são opções comuns.
Como sei se o Prometheus está coletando métricas corretamente?
Verifique a página de Targets na interface web: cada alvo deve estar com estado UP. Além disso, execute uma consulta simples, como up, e veja se retorna valores 1 para os serviços saudáveis.
O que fazer se meu serviço não aparece nas métricas?
Confirme se o serviço está acessível na porta configurada e se o endpoint /metrics responde. Teste com curl. Se o formato da resposta não for o texto esperado, ajuste a biblioteca cliente ou o exporter usado.