Navegar na documentação

Exemplos de integração

Receitas prontas para enviar alertas a uma Fonte de Dados: shell, Python, n8n e um media type de Zabbix. Todas usam o mesmo contrato da Referência do payload; troque whk_SEU_TOKEN pelo token da sua fonte.

Antes de começar

  • Crie (ou copie) a fonte em Ajustes → Fontes de Dados e guarde o Token de autenticação em variável de ambiente.
  • Decida a key de cada problema antes de escrever código. Ela precisa ser a mesma no problema e na resolução. Veja Ciclo de vida do alerta e a key.
  • Escolha a severidade na escala 0–5 (5 = Desastre, 4 = Alta, 3 = Média, 2 = Atenção, 1 = Informação, 0 = Não classificado).

Teste rápido de conexão

Um POST mínimo confirma token e rede. A resposta esperada é 202:

export SENTRYA_TOKEN="whk_SEU_TOKEN"

curl -sS -o /dev/null -w "%{http_code}\n" \
  -X POST https://app.flowbix.com/api/v1/alerts \
  -H "Authorization: Bearer $SENTRYA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key":"teste-conexao","host":"meu-pc","title":"Teste de conexão","severity":1,"status":"problem"}'

Um incidente "Teste de conexão" aparece na aba Incidentes. Feche-o com o mesmo comando trocando o corpo por {"key":"teste-conexao","host":"meu-pc","status":"resolved"}. Se receber 401, o token está errado ou a fonte foi removida.

Bash + curl com resolução

Um script de verificação que abre o problema quando o check falha e fecha quando volta. Como a key é estável, rodar em cron a cada minuto não cria duplicatas: enquanto o problema durar, os envios só atualizam o incidente.

#!/usr/bin/env bash
set -u
URL="https://app.flowbix.com/api/v1/alerts"
TOKEN="${SENTRYA_TOKEN:?defina SENTRYA_TOKEN}"
HOST="$(hostname)"
KEY="disco-raiz:$HOST"
LIMITE=90

USO=$(df -P / | awk 'NR==2 {gsub("%","",$5); print $5}')

enviar() {
  curl -sS --retry 3 --retry-delay 5 --retry-connrefused \
    -X POST "$URL" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d "$1"
}

if [ "$USO" -ge "$LIMITE" ]; then
  enviar "{\"key\":\"$KEY\",\"host\":\"$HOST\",\"title\":\"Disco / acima de ${LIMITE}%\",\"severity\":4,\"message\":\"Uso atual: ${USO}%\",\"status\":\"problem\"}"
else
  enviar "{\"key\":\"$KEY\",\"host\":\"$HOST\",\"status\":\"resolved\"}"
fi

Enviar resolved a cada execução saudável é seguro: se não há incidente ativo para a key, o servidor não muda nada. O --retry do curl cobre 503 e falhas de rede.

Python (requests)

import os
import requests

URL = "https://app.flowbix.com/api/v1/alerts"
HEADERS = {
    "Authorization": f"Bearer {os.environ['SENTRYA_TOKEN']}",
    "Content-Type": "application/json",
}

def abrir(key, host, title, severity=3, message=""):
    body = {"key": key, "host": host, "title": title,
            "severity": severity, "message": message, "status": "problem"}
    r = requests.post(URL, json=body, headers=HEADERS, timeout=10)
    r.raise_for_status()          # 4xx/5xx viram exceção
    return r.json()               # {"success": true, "status": "new", ...}

def resolver(key, host):
    body = {"key": key, "host": host, "status": "resolved"}
    r = requests.post(URL, json=body, headers=HEADERS, timeout=10)
    r.raise_for_status()
    return r.json()

resp = abrir("fila-travada:worker-02", "worker-02",
             "Fila de e-mails parada", severity=4,
             message="0 mensagens processadas nos últimos 10 min")
print(resp["status"], resp.get("recurrence_count"))

Trate 503 e erros de conexão com nova tentativa. Um 400 não deve ser repetido: o payload está errado e vai falhar de novo.

n8n

O pacote de nós da Flowbix traz o nó Sentrya. Para enviar alertas, use o recurso Webhook e a operação Enviar Alerta (ação "Enviar alerta para um webhook"). O nó monta o POST em /api/v1/alerts por você e autentica com o token da fonte, não com o token da credencial.

  1. Credencial Configure a credencial do Sentrya no n8n com um token de service account (veja Integração com n8n). Ela serve para o nó listar as fontes da empresa.
  2. Webhook de destino No campo Webhook Name or ID, escolha a fonte na lista; o token de ingestão é resolvido sozinho. Se preferir, use uma expressão e informe o token whk_… diretamente.
  3. Tipo do evento Problema ou Resolvido. Em Problema, preencha Título; em Resolvido, a Key é obrigatória.
  4. Key e campos adicionais Informe a Key (Identidade Do Problema) e, em Campos Adicionais, o que precisar: Host, Severidade (0–5), Mensagem e Comentário. Tudo aceita expressões dos nós anteriores.
  5. Saída O item de saída é a resposta da API (success, status, key, recurrence_count), pronta para um nó IF.

O nó valida antes de chamar a API: resolução sem key e problema sem título param com mensagem clara no próprio n8n, em vez de um 400.

Zabbix como fonte (media type webhook)

O caminho recomendado para Zabbix é conectar o servidor em Servidores Zabbix: o Sentrya coleta os problemas pela API, sem configuração no Zabbix (veja Conectar um servidor Zabbix). Use um media type só quando a API do Zabbix não estiver acessível pela internet.

Crie um media type do tipo Webhook com os parâmetros abaixo. Os valores são macros nativas do Zabbix e o número de severidade do Zabbix (0–5) é o mesmo do Sentrya, sem conversão.

ParâmetroValorCampo do Sentrya
urlhttps://app.flowbix.com/api/v1/alerts
tokeno token whk_… da fontecabeçalho Authorization
key{TRIGGER.ID}key
host{HOST.NAME}host
title{EVENT.NAME}title
severity{EVENT.NSEVERITY}severity
value{EVENT.VALUE}decide status: 1 = problem, 0 = resolved
messageEvento {EVENT.ID}message

Script do media type:

var p = JSON.parse(value);
var req = new HttpRequest();
req.addHeader('Content-Type: application/json');
req.addHeader('Authorization: Bearer ' + p.token);

var body = {
  key: p.key,
  host: p.host,
  title: p.title,
  severity: parseInt(p.severity, 10),
  message: p.message,
  status: p.value === '0' ? 'resolved' : 'problem'
};

var resp = req.post(p.url, JSON.stringify(body));
if (req.getStatus() !== 202) {
  throw 'Sentrya respondeu ' + req.getStatus() + ': ' + resp;
}
return 'OK';

Na ação do Zabbix, inclua as operações de recuperação para que o evento com {EVENT.VALUE} igual a 0 também seja enviado; sem isso os incidentes nunca fecham no Sentrya. Se mais de um Zabbix envia para o Sentrya, crie uma fonte por servidor: o id da trigger só é único dentro de um Zabbix, e duas triggers de servidores diferentes com o mesmo id cairiam no mesmo incidente.

Outras ferramentas

CloudWatch, Grafana e similares normalmente permitem um webhook com corpo personalizado ou um script intermediário. O caminho mais confiável é um pequeno serviço (ou um fluxo no n8n) que recebe o evento da ferramenta e monta o JSON do Sentrya: key estável (por exemplo o nome do alarme mais o recurso), title, severity traduzida para 0–5 e status a partir do estado do alarme. Não envie o payload da ferramenta direto: campos desconhecidos são ignorados e, sem title, o Sentrya devolve 400.

Sirene exige severity 5. Se alguém criar um ouvinte com urgência Sirene sobre um alerta da sua fonte, problemas dessa key com severity menor que 5 passam a ser recusados com 422 e a mensagem explica o motivo. Mapeie o que é realmente crítico para 5 e deixe o resto abaixo. Veja Sirene: o alerta máximo.

Veja também