KSD, seus três acompanhamentos são os que levei mais tempo para acertar, então aqui está o que eu terminei depois de errar cada um deles primeiro.
Desvio gradual. A armadilha é comparar contra a execução anterior, porque então um declínio lento nunca dispara nada — cada execução é apenas um pouco pior do que a anterior, e um dia ruim silenciosamente se torna a linha de base de amanhã. Uma mediana nas últimas N execuções resolve isso, e deve ser uma mediana em vez de uma média, porque um dia inusitadamente grande arrasta uma média para algum lugar que nenhuma execução real já esteve. Dê a ela um calendário se os dados tiverem um: um cliente cujo segunda-feira é legitimamente dez vezes sua terça-feira alertará cada segunda-feira ou esconderá uma segunda-feira colapsada dentro da média da semana.
Mas uma mediana móvel tem sua própria falha, e é pior. Se um workflow retorna nada por duas semanas, a mediana de execuções recentes fica zero, a interrupção deixa de parecer anormal, e a recuperação é o que te avisa. Então para qualquer coisa que realmente importe, deixo que o histórico proponha um número e depois o mantenho como um valor esperado fixo que uma pessoa aprovou. Um número aprovado não pode aprender uma interrupção. O custo é que ele não acompanha uma mudança legítima, então você o edita quando o volume realmente muda — esse é o tradeoff, e para qualquer coisa que envolva receita, é o correto.
Workflows orientados por eventos: Eu não os julgo em absoluto. Um workflow de webhook que fica ocioso por quatro dias pode ser perfeitamente saudável, e uma verificação que trata silêncio como falha alertará sobre cada webhook que você possui e será silenciada em uma semana. Só aplico obsolescência a workflows cujo próprio gatilho diz que eles se iniciam — schedule, cron, interval — e derivo a tolerância do intervalo no gatilho em vez de definir um limite global, já que um número grita sobre um workflow de dez minutos que está um pouco atrasado ou esconde um diário que morreu na terça.
Canários com dados variáveis: Eu não resolvi isso e não acho que seja resolvível de dentro da execução. Se a fonte muda de uma forma que move cada registro de uma vez, a contagem está correta, os campos estão todos presentes, e o histórico próprio do workflow concorda com a resposta errada. Qualquer verificação que compara uma execução contra seu próprio passado é cega para isso por construção. A única coisa que vi funcionar é um valor conhecido-bom de fora — alguém que raspa preços mantém cinco URLs que verifica manualmente uma vez por mês — e a razão pela qual resiste à automação é que qualquer valor esperado que você possa computar muda com a mesma mudança que quebrou os dados.
Uma coisa que não vi mencionada na thread e que me custou o mais: a contagem estar correta não significa que o conteúdo está. Um puxão de extrato bancário pode descartar a linha de aluguel, pegar dois novos comerciantes e chegar em exatamente o total normal, ponto em que cada número no seu monitoramento concorda consigo mesmo e os dados estão errados. Nomear o punhado de valores que devem aparecer em cada execução pega isso, e nenhuma contagem de qualquer tipo o faz. Cuidado para essa lista não ficar obsoleta — uma linha renomeada chorará cada manhã até você parar de ler, o que é pior do que não verificar nada.
Implementação de tudo acima é licenciada MIT se for útil ler em vez de reconstruir: GitHub - moneywithjjcom-del/ranfine-: Watches n8n workflows from outside n8n and alerts when one goes quiet or quietly stops doing its job. Catches the failure n8n reports as success. · GitHub