← Back to blog
steply / blog · self-healing-issues-arquitetura-n8n-steply.md
$ steply blog open self-healing-issues-arquitetura-n8n-steply
▸ loading article…
✓ ready

Como Construímos um DevOps Central Hub Self-Healing com n8n, Schema Validation e Multi-Channel: A Arquitetura Por Trás da Steply

bySteply5 min read

Quando uma empresa cresce e os sistemas viram constelação de microserviços, integrações, webhooks e canais de notificação, a velha estratégia de "tudo no Slack" colapsa. Notificação demais vira ruído, notificação de menos vira incidente perdido, e quando algo falha no caminho ninguém sabe se foi rede, schema, autenticação ou erro de regra. Foi para resolver esse problema na nossa própria operação que construímos um DevOps Central Hub self-healing em n8n, com validação de schema, motor de auto-recuperação, e roteamento inteligente para múltiplos canais.

Este post documenta a arquitetura, as decisões e os aprendizados que tornaram esse hub o coração da nossa operação de DevOps em 2026, e por que recomendamos esse padrão para empresas que querem operar com qualidade sem aumentar headcount linearmente.

O problema original

Tínhamos a história típica de uma empresa de engenharia: GitHub, Slack, WhatsApp, Discord, logs, dashboards, e-mail. Cada sistema gritando com tom próprio. Quatro problemas se acumulavam. 1. Notificação inconsistente: o mesmo evento aparecia em três canais com formato diferente, ou não aparecia. 2. Falhas silenciosas: webhook que caía não disparava nada, e descobríamos pelo cliente. 3. Esquema instável: GitHub mudava payload, integração quebrava, e o erro morria em algum log que ninguém olhava. 4. Sem auditoria: difícil reconstituir o que aconteceu em incidente.

Resolver com código distribuído por vários serviços era caro e frágil. Optamos por construir um hub central de eventos em n8n, com camadas explícitas, validação rigorosa e capacidade de se recuperar de falhas sem intervenção humana.

As 4 grandes seções do hub

A arquitetura é dividida em quatro blocos que trabalham juntos como uma esteira.

1. Entrada de eventos. Recebe sinais de três fontes: Schedule (cron interno, jobs periódicos), Webhook HTTP (qualquer sistema externo) e GitHub Events (pull request, issues, workflow runs). Todos passam por um Merge Triggers que normaliza o formato e injeta metadados (origem, tipo, timestamp, correlation_id) antes de seguir.

2. SDD - Schema Validation. Toda mensagem é validada contra um schema declarado (JSON Schema versionado). Eventos válidos seguem para o roteador; eventos inválidos vão para um nó Validation Error Log e disparam alerta para o time de plataforma. Isso é Spec-Driven Development aplicado a operação: o contrato é explícito, falhas são detectadas cedo, e a integração não morre em silêncio quando um provedor muda payload.

3. Self-Healing Engine. O motor que diferencia esse hub de uma esteira comum. Tem três capacidades: retry com backoff exponencial em falhas transientes (rede, rate limit, timeout); re-execução automática de passos idempotentes após circuit breaker; fallback routing que escolhe canal alternativo quando o primário cai (ex: Slack fora → Discord; WhatsApp fora → e-mail). Tudo isso instrumentado com métrica para que o time veja, em dashboard, quando o sistema se curou sozinho.

4. Canal de saída. Roteamento por prioridade e tipo de evento para os canais certos: Slack para tráfego operacional contínuo, WhatsApp/Signal para alerta crítico fora do horário, Discord para o canal técnico interno, audit logger para storage imutável, dashboard update para visão em tempo real.

O fluxo na prática

Um evento entra pelo webhook. Webhook Entry recebe, registra recebimento, atribui correlation_id. Merge Triggers normaliza o formato em conjunto com eventos de schedule e GitHub. SDD Validator roda o schema correspondente. Se passa, segue para Standard Processor ou Critical Processor conforme classificação. Priority Sorter define urgência. Message Formatter monta o conteúdo final por canal (template e tom variam: Slack permite blocos ricos; WhatsApp é texto curto). Channel Router decide o destino. Self-Heal Decision entra em ação caso algum canal falhe, redirecionando para fallback. Cada saída (Slack Send, WhatsApp Send, Discord Send, Audit Logger) registra confirmação ou erro de volta ao loop de observabilidade.

Por que n8n e não código puro

Cinco motivos pesaram. 1. Visibilidade: qualquer pessoa do time consegue olhar o diagrama e entender o fluxo. Em código puro, leva horas. 2. Iteração rápida: ajustar regra de roteamento ou template de mensagem é arrastar nó, não deploy. 3. Histórico de execução: cada execução fica registrada com payload em cada nó, facilitando debug e auditoria. 4. Ecossistema de nós: integrações prontas para Slack, GitHub, Discord, WhatsApp (via API), Telegram, e-mail, Notion, Postgres. 5. Self-hosted: roda na nossa infra, sem custo por execução, sem dado sensível saindo.

Trade-offs reais: lógica muito complexa em nó Code vira difícil de testar. Para esses casos, exportamos para microserviço chamado via HTTP. O hub trata orquestração e contratos; lógica de domínio fica em serviços versionados em Git.

Auditoria e compliance

Cada evento é gravado em storage append-only (BigQuery + bucket frio) com payload original, normalizado, decisões tomadas e resultado em cada canal. Isso resolve três problemas: (1) reconstituir incidente; (2) comprovar SLA (quando notificamos, por qual canal, com qual latência); (3) compliance, em demandas que exigem rastreabilidade.

Self-healing na prática: o que se cura sozinho

Cinco cenários típicos. Rate limit do Slack: retry com backoff até janela liberar. Webhook do GitHub instável: re-tentativa de pull de status via API, sem perder evento. Canal WhatsApp fora do ar: fallback automático para Discord + e-mail, com nota de "canal primário indisponível". Schema do GitHub mudou: schema validator detecta, alerta plataforma, marca evento como "quarentena" para revisão sem bloquear os demais. Job do schedule travado: detector identifica falta de execução esperada e dispara segundo gatilho.

Métricas e observabilidade do hub

Acompanhamos sete métricas em dashboard. Eventos processados por minuto. Latência p50/p95/p99 ponta-a-ponta. Taxa de validação OK vs erro de schema. Acionamento de self-heal por tipo. Falha definitiva por canal. SLA por classe de evento. Custo de execução (compute do n8n e chamadas externas).

O que mudou no nosso dia a dia

Três efeitos imediatos. (1) Tempo médio de detecção de incidente caiu drasticamente; antes, alguém precisava cruzar logs. (2) Notificações duplicadas e ruidosas sumiram; cada evento tem um destino certo, e o tom certo. (3) Mudanças de schema viraram não-evento; quando GitHub mexe em payload, o hub avisa, isola, e seguimos. O custo de manter integrações caiu porque o trabalho duro foi feito uma vez no esqueleto, em vez de espalhado por serviços.

Quem pode usar essa arquitetura

Empresas com pelo menos três integrações ativas, time técnico pequeno e necessidade de operação previsível. É o ponto ótimo: complexidade suficiente para justificar o hub, leveza suficiente para tirar do papel em semanas. Para times menores, um Slack + alguns webhooks já basta. Para times muito grandes, vale uma plataforma dedicada de eventos (Kafka, EventBridge) com hub como camada de orquestração.

O próximo passo: IA dentro do hub

Estamos integrando agentes de IA em pontos específicos do hub. Triagem automática de issue (classificação, prioridade, sugestão de owner). Resumo executivo diário para a liderança. Detecção de padrão em incidente recorrente. Cada uso entra no hub com schema validation e self-heal, sem virar caixa-preta. A arquitetura foi desenhada pensando nesse próximo capítulo: operação aumentada por IA, com governança e observabilidade desde o primeiro byte.