Aula 19 - Monitoramento e Observabilidade com Prometheus e Grafana 📊
Objetivo Pedagógico
Objetivo: Conceber arquiteturas modernas de observabilidade baseadas nos Três Pilares (Métricas, Logs e Tracing) utilizando Prometheus para coleta em modelo pull, Alertmanager para roteamento de incidentes e Grafana para visualização operacional.
📑 1. Fundamentos Teóricos & Análise Técnica
Em arquiteturas distribuídas e de microsserviços, o monitoramento tradicional baseado em ping ou verificação de portas tornou-se obsoleto. A disciplina de Engenharia de Confiabilidade de Sites (SRE) estabelece o conceito de Observabilidade: a capacidade de inferir os estados internos de um sistema complexo a partir de suas saídas externas.
A observabilidade moderna estrutura-se sobre Os Três Pilares: 1. Métricas (Prometheus): - Dados numéricos de séries temporais agregáveis (Counter, Gauge, Histogram, Summary). - O Prometheus opera no Modelo Pull: o servidor busca ativamente métricas nos endpoints HTTP /metrics dos alvos (Scraping), evitando sobrecarga nos agentes e facilitando descoberta dinâmica de serviços. - Os Quatro Sinais Dourados (Google SRE): Latência, Tráfego (taxa de requisições), Erros e Saturação (uso de CPU, disco, pools de memória). 2. Logs Estruturados (Loki / ELK): - Registros de eventos com timestamp em formato JSON enriquecidos com metadados de contexto (traceId, userId, tenantId). 3. Rastreamento Distribuído (Distributed Tracing - OpenTelemetry / Tempo): - Rastreia o caminho exato percorrido por uma única requisição através de dezenas de microsserviços distintos via injeção de cabeçalhos de contexto (traceparent), destacando o span exato que causou lentidão.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
App["Microsserviço de Aplicação (/metrics)"] --> Prometheus["Prometheus Server (Scrape Pull a cada 15s)"]
Prometheus --> TSDB["Armazenamento Time-Series Local"]
Prometheus --> PromQL["Motor de Consultas PromQL"]
PromQL --> Alert["Alertmanager (Deduplicação & PagerDuty/Slack)"]
PromQL --> Grafana["Grafana Dashboards (Visualização em Tempo Real)"]
style App fill:#e1f5fe,stroke:#01579b
style Prometheus fill:#fff3e0,stroke:#e65100
style TSDB fill:#ffebee,stroke:#c62828
style Grafana fill:#f3e5f5,stroke:#7b1fa2
style Alert fill:#e8f5e9,stroke:#2e7d32 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Métricas em Formato Aberto (OpenMetrics): Padronização do formato texto de métricas adotado por Prometheus e toda a Cloud Native Computing Foundation (CNCF). - PromQL (Prometheus Query Language): Linguagem poderosa para cálculo de taxas instantâneas (rate()), percentis de latência (histogram_quantile()) e alertas preditivos. - SLO e Error Budgets: Definição matemática da margem de erro aceitável para orientar a cadência de novas releases sem degradar a experiência do cliente. - Alertas Baseados em Sintomas: Disparo de alertas voltados para a degradação de serviço percebida pelo usuário em vez de alertas ruidosos de causa raiz.
🛠️ 2. Implementação Prática em Observabilidade de Sistemas Distribuídos e SRE
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// prometheus_rules_slo.yml (Regras de Alerta Prometheus com SLO e Taxa de Erro)
groups:
- name: api_slo_alerts
rules:
# Alerta quando a taxa de erro HTTP 5xx ultrapassar 1% em uma janela de 5 minutos
- alert: HighHttpErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m])) * 100 > 1.0
for: 2m
labels:
severity: critical
team: platform
annotations:
summary: "Taxa de erro HTTP crítica em {{ $labels.instance }}"
description: "A taxa de erro 5xx está em {{ $value | printf '%.2f' }}%, violando o SLO de confiabilidade."
# Alerta de latência de percentil 99 acima do threshold aceitável
- alert: HighLatencyP99
expr: |
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)) > 0.5
for: 3m
labels:
severity: warning
annotations:
summary: "Latência p99 degradada (> 500ms)"
description: "99% dos usuários estão esperando mais de 500ms nas respostas da API."
💡 Análise Passo a Passo do Código
- Cálculo Relativo de Taxa (
rate): Normaliza picos de tráfego temporários avaliando a proporção de erros em relação ao volume total de requisições. - Diretiva
for: 2m: Previne falsos alertas e alertas intermitentes (Alert Flapping) exigindo persistência da condição de anomalia. - Mapeamento de Metadados e Severidade: Direciona o incidente automaticamente para o canal correto de resposta de engenharia.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto