Como configurar alertas de monitoramento com Grafana
1. Introdução aos Alertas no Grafana
O sistema de alertas do Grafana, conhecido como Grafana Alerting, foi unificado a partir da versão 8.0 para oferecer uma experiência integrada de monitoramento e notificação. Diferentemente do modelo antigo, que dependia de fontes de dados específicas e painéis separados, o novo sistema centraliza a criação, avaliação e envio de alertas em um único local. Isso permite que você defina regras diretamente a partir de consultas, independentemente da fonte de dados utilizada.
Casos de uso típicos incluem:
- Notificar equipes quando servidores ultrapassam 90% de uso de CPU
- Alertar sobre latências elevadas em endpoints de API
- Monitorar disponibilidade de serviços críticos com base em métricas de uptime
2. Configuração de Fontes de Dados e Regras de Alerta
Para começar, conecte suas fontes de dados. O Grafana suporta Prometheus, InfluxDB, Graphite, Elasticsearch, entre outros. Vamos usar Prometheus como exemplo.
Passo 1: Adicionar fonte de dados
Acesse Configuration > Data Sources > Add data source. Selecione Prometheus e configure a URL (ex: http://localhost:9090). Teste a conexão.
Passo 2: Criar regra de alerta
Vá para Alerting > Alert rules > New alert rule. Defina:
- Nome:
CPU alta no servidor web - Consulta:
avg by(instance) (rate(node_cpu_seconds_total{mode="user"}[5m])) * 100 > 85 - Condição:
WHEN avg() OF query (A) IS ABOVE 85 - Avaliação:
every 1m for 5m(avalia a cada minuto, dispara se condição persistir por 5 minutos)
Exemplo de regra em JSON:
{
"name": "CPU alta no servidor web",
"condition": "A > 85",
"evaluationInterval": "1m",
"for": "5m",
"query": "avg by(instance) (rate(node_cpu_seconds_total{mode=\"user\"}[5m])) * 100"
}
3. Gerenciamento de Notificações e Canais de Contato
Após criar regras, configure canais de notificação. Acesse Alerting > Contact points > New contact point.
Exemplo de canal Slack:
Type: Slack
URL: https://hooks.slack.com/services/T00000000/B00000000/xxxxxxxx
Channel: #alerts
Username: Grafana
Exemplo de canal E-mail:
Type: Email
Addresses: equipe@exemplo.com
Subject: [ALERTA] {{ .Alert.Name }}
Para personalizar mensagens, use templates Go. Exemplo de template para notificação:
{{ define "custom_message" }}
Alerta: {{ .Alert.Name }}
Status: {{ .Alert.State }}
Métrica: {{ .Alert.Values.A }}
{{ end }}
Crie políticas de silenciamento em Alerting > Silences para evitar notificações durante janelas de manutenção.
4. Criação de Alertas Baseados em Anomalias e Métricas Complexas
O Grafana permite alertas com expressões matemáticas avançadas. Por exemplo, para detectar anomalias com base em desvio padrão:
Query A: rate(http_requests_total[5m])
Query B: avg_over_time(rate(http_requests_total[5m])[1h:1m])
Query C: stddev_over_time(rate(http_requests_total[5m])[1h:1m])
Condição: A > B + 3 * C
Para métricas de SLA, calcule o percentual de sucesso:
Query A: sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
Query B: sum(rate(http_requests_total[5m]))
Condição: (A / B) * 100 < 99.9
5. Organização e Hierarquia de Alertas
Organize regras em pastas no Grafana. Crie pastas como Infraestrutura, Aplicação, Segurança. Use rótulos (labels) para categorizar:
Labels: severity=critical, team=infra, service=api
Para múltiplas condições, use operadores lógicos:
Condição: A > 90 AND B < 10
Exemplo de regra com múltiplas condições:
{
"condition": "A > 80 OR (B < 5 AND C > 100)",
"queries": [
{"refId": "A", "query": "cpu_usage"},
{"refId": "B", "query": "memory_free"},
{"refId": "C", "query": "disk_io"}
]
}
6. Testes e Depuração de Alertas
Teste regras usando o botão Test rule na interface de criação. Visualize o histórico em Alerting > Alert instances > History.
Para simular um alerta:
1. Crie uma regra com condição facilmente atingível (ex: 1 > 0)
2. Aguarde o período de avaliação
3. Verifique o estado no histórico
Estratégias para evitar falsos positivos:
- Use o parâmetro for para exigir que a condição persista por um período
- Aplique média móvel nas consultas para suavizar picos momentâneos
- Configure limites mínimos de amostragem
7. Integração com Ferramentas de APM e Monitoramento
Para sincronizar com Prometheus Alertmanager, configure o Grafana como fonte de alertas no Alertmanager:
# No Alertmanager
route:
receiver: 'grafana'
receivers:
- name: 'grafana'
webhook_configs:
- url: 'http://grafana:3000/api/alertmanager/alert'
Integração com Datadog via webhook:
Type: Webhook
URL: https://api.datadoghq.com/api/v1/events
Headers: DD-API-KEY: <sua_chave>
Payload: {"title": "{{ .Alert.Name }}", "text": "{{ .Alert.Message }}"}
8. Boas Práticas e Manutenção de Alertas
Documente regras usando anotações no próprio Grafana. Versionamento pode ser feito exportando regras para arquivos YAML:
# Exemplo de regra exportada
apiVersion: 1
rules:
- name: "CPU alta"
condition: "A > 85"
for: "5m"
labels:
severity: critical
Revisão periódica: a cada trimestre, avalie se thresholds ainda são relevantes. Use dashboards de "alertas por severidade" para identificar ruído.
Estratégia de escalonamento:
Nível 1: Notificação Slack (equipe de plantão)
Nível 2: Se não resolvido em 15 min, enviar e-mail para gerente
Nível 3: Se não resolvido em 30 min, acionar PagerDuty
Referências
- Documentação Oficial do Grafana Alerting — Guia completo sobre criação e gerenciamento de alertas no Grafana
- Tutorial: Configurando Alertas com Prometheus e Grafana — Integração entre Prometheus Alertmanager e Grafana
- Boas Práticas para Alertas em Monitoramento — Artigo do blog oficial do Grafana sobre práticas recomendadas
- Como Criar Alertas Baseados em Anomalias no Grafana — Documentação sobre detecção de anomalias usando expressões matemáticas
- Integração Grafana com Slack para Notificações — Passo a passo para configurar notificações no Slack
- Gerenciamento de Silenciamentos e Supressão de Alertas — Guia sobre como criar políticas de silenciamento no Grafana