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