Alertas no Grafana: e-mail, Slack e Telegram

    Alertas transformam dashboards passivos em monitoramento ativo — você recebe notificação quando CPU está alta, disco está cheio ou serviço caiu, antes do usuário reportar o problema. O Grafana Alerting unificado (disponível desde a versão 9) suporta múltiplos canais de notificação e regras baseadas em PromQL.

    Configurar contact points (canais de notificação)

    Contact points definem para onde os alertas são enviados. Configure Telegram (mais prático para equipes pequenas):

    bash
    # 1. Criar bot no Telegram:
    #    - Converse com @BotFather no Telegram
    #    - /newbot → nome → username
    #    - Guarde o TOKEN gerado
    
    # 2. Obter o chat_id:
    #    - Envie uma mensagem para o bot
    #    - Acesse: https://api.telegram.org/botTOKEN/getUpdates
    #    - Pegue o "id" dentro de "chat"
    
    # 3. Configurar no Grafana via API:
    curl -X POST http://localhost:3000/api/v1/provisioning/contact-points \
      -H "Content-Type: application/json" \
      -u admin:senha \
      -d '{
        "name": "Telegram Prod",
        "type": "telegram",
        "settings": {
          "bottoken": "SEU_TOKEN_BOT",
          "chatid": "SEU_CHAT_ID",
          "message": "{{ template \"default.message\" . }}"
        }
      }'
    Dica
    Para grupos Telegram: adicione o bot ao grupo e use o chat_id negativo do grupo (ex: -1001234567890). Para obter o ID do grupo: envie mensagem no grupo e consulte getUpdates.

    Configurar alerta via interface do Grafana

    O processo completo para criar uma regra de alerta no Grafana:

    bash
    # Via interface Grafana (Alerting → Alert rules → New alert rule):
    
    # 1. Nome: "CPU Alta — VPS Prod"
    
    # 2. Query A (PromQL):
    100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
    
    # 3. Condição:
    #    WHEN: last() OF query(A, 5m, now)
    #    IS ABOVE: 80
    
    # 4. Pending period: 5m
    #    (aguardar 5 minutos acima do threshold antes de disparar)
    
    # 5. Labels: severity=warning, team=ops
    
    # 6. Annotations:
    #    Summary: "CPU alta em {{ $labels.instance }}"
    #    Description: "CPU em {{ $values.A.Value | printf \"%.1f\" }}% por 5+ minutos"
    
    # 7. Folder: Infrastructure
    #    Evaluation group: node-alerts (15s interval)

    Notification policies: rotear alertas

    Notification policies definem qual contact point recebe qual alerta baseado em labels:

    bash
    # Política de roteamento via API:
    curl -X PUT http://localhost:3000/api/v1/provisioning/policies \
      -H "Content-Type: application/json" \
      -u admin:senha \
      -d '{
        "receiver": "telegram-prod",
        "group_by": ["alertname", "instance"],
        "group_wait": "30s",
        "group_interval": "5m",
        "repeat_interval": "4h",
        "routes": [
          {
            "receiver": "telegram-prod",
            "matchers": ["severity=critical"],
            "group_wait": "10s",
            "repeat_interval": "1h"
          },
          {
            "receiver": "email-oncall",
            "matchers": ["severity=warning"],
            "repeat_interval": "6h"
          }
        ]
      }'
    Dica
    repeat_interval define com que frequência re-notificar enquanto o alerta está ativo. Para alertas críticos: 1h. Para warnings: 4-6h. Sem repeat_interval, o alerta notifica apenas na transição firing → resolved.

    Configurar e-mail como contact point

    Configure SMTP no Grafana para envio de e-mails:

    yaml
    # docker-compose.yml — variáveis de ambiente do Grafana
    services:
      grafana:
        environment:
          GF_SMTP_ENABLED: "true"
          GF_SMTP_HOST: "smtp.sendgrid.net:587"
          GF_SMTP_USER: "apikey"
          GF_SMTP_PASSWORD: ${SENDGRID_API_KEY}
          GF_SMTP_FROM_ADDRESS: "grafana@seudominio.com.br"
          GF_SMTP_FROM_NAME: "Grafana Monitoring"
    
    # Adicionar contact point de e-mail:
    curl -X POST http://localhost:3000/api/v1/provisioning/contact-points \
      -H "Content-Type: application/json" \
      -u admin:senha \
      -d '{
        "name": "Email Oncall",
        "type": "email",
        "settings": {
          "addresses": "oncall@seudominio.com.br;dev@seudominio.com.br",
          "subject": "[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}"
        }
      }'

    Silenciar alertas durante manutenção

    Silenciamentos evitam notificações desnecessárias durante deploys e manutenções planejadas:

    bash
    # Criar silenciamento via API (duração: 2 horas)
    STARTS_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)
    ENDS_AT=$(date -u -d "+2 hours" +%Y-%m-%dT%H:%M:%SZ)
    
    curl -X POST http://localhost:3000/api/alertmanager/grafana/api/v2/silences \
      -H "Content-Type: application/json" \
      -u admin:senha \
      -d "{
        \"matchers\": [{
          \"name\": \"instance\",
          \"value\": \"vps-prod-01\",
          \"isRegex\": false
        }],
        \"startsAt\": \"$STARTS_AT\",
        \"endsAt\": \"$ENDS_AT\",
        \"comment\": \"Manutenção programada — deploy v2.0\",
        \"createdBy\": \"deploy-script\"
      }"
    
    # Listar silenciamentos ativos
    curl http://localhost:3000/api/alertmanager/grafana/api/v2/silences -u admin:senha

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes