Pular para o conteúdo
use-cases / heartbeat-for-silent-jobs / hero
CRON · NOTIFICAÇÕES · ALARME-DE-SILÊNCIO

Um heartbeat para os jobs silenciosos

A maioria dos monitoramentos olha o que aconteceu. Você precisava de algo que olhasse o que não aconteceu. Duas entradas de cron — uma bate, a outra escuta a ausência da batida — e o alerta que te encontra na praia.

use-cases / heartbeat-for-silent-jobs / mechanism

Duas entradas de cron. Uma diz Estou vivo. A outra escuta o nada.

O job que você já tinha continua fazendo seu trabalho. Quando termina, ele acrescenta um curl: uma linha de heartbeat para um endpoint de notificações. Uma segunda entrada de cron roda na própria cadência e checa por silêncio — se não há batida fresca, ela alerta seu celular. O sucesso do job é silencioso. A ausência dele é barulhenta.

worker.cron · o job
POST · heartbeat
schedule0 2 * * *
# Depois que o export noturno termina,# o job pinga seu próprio heartbeat.0 2 * * * /usr/local/bin/export.sh \ && curl -fsS -X POST \ https://notify.containers.hoody.com/heartbeats/backup-prod-db
a ausência é o sinal
watcher.cron · o ouvinte
GET · silence-check
schedule*/15 * * * *
# A cada 15 minutos, pergunta: houve uma batida?# Se silente por >1h, a API alerta todos os canais.*/15 * * * * curl -fsS \ https://notify.containers.hoody.com/silence-check?\ job=backup-prod-db&max_age=1h

Dois POSTs em /users/root/entries com expressões de cinco campos. O primeiro roda depois de cada job agendado e posta seu heartbeat. O segundo roda na própria cadência, pergunta ao endpoint de notificações se a última batida está fresca, e dispara o alerta se não estiver. Sem fila, sem agente, sem daemon — só duas linhas de crontab que já tinham que existir.

use-cases / heartbeat-for-silent-jobs / powers

Por que vigiar a ausência é diferente

A maioria das ferramentas de monitoramento vigia o caminho do sucesso: alertam quando algo acontece. Esse formato alerta quando nada acontece — e esse é o caso que os jobs silenciosos sempre perdem.

MODOS DE FALHA

Pega a queda silenciosa

Se o processo worker nunca inicia — a caixa reiniciou, o script foi deletado, uma cota expirou — não há nada para logar e nada para alertar. O cron do watcher roda mesmo assim e percebe que a linha do heartbeat está velha. O que pega a queda silenciosa é exatamente o que não depende do que está silente.

ZERO SUPERFÍCIE

Nenhum serviço novo para babá

O monitor é uma linha de crontab a mais, não uma conta no Healthchecks.io ou um alarme do CloudWatch. Está atrelado ao mesmo contêiner do trabalho, expira com `expires_at` se você quiser, e lê da mesma API de notificações que o resto da sua stack já usa.

TE ALCANÇA

Barulhento quando importa

O endpoint de notificações distribui o alerta por push, SMS e email — os canais em que você já confia. Você não fica olhando o dashboard. O dashboard se vigia, e te encontra na praia em Bali só quando o silêncio já se estendeu demais.

use-cases / heartbeat-for-silent-jobs / capacity

Cron de verdade, notificações de verdade

O mecanismo é Hoody Cron e Hoody Notifications puros. Os números vêm da superfície de API documentada, não de um runtime de demo.

  1. TODA SINTAXE CRON@daily

    Expressões padrão de 5 campos mais macros — `@hourly`, `@daily`, `@weekly`, `@monthly`, `@yearly`. O watcher e o worker podem ter cadências completamente diferentes.

  2. AUTO-EXPIRAÇÃOexpires_at

    Entradas gerenciadas suportam `expires_at`, então um heartbeat temporário (uma janela de migração de uma semana, digamos) se limpa sozinho. O watcher some junto com o trabalho.

  3. ISOLAMENTOpor usuário

    Cada contêiner tem seu próprio crontab. O heartbeat de um tenant não pode silenciar o watcher de outro, e desativar um job é um único PATCH `enabled: false`.

Limites pela Hoody Cron API: expressões de 5 campos mais as macros `@hourly`/`@daily`/`@weekly`/`@monthly`/`@yearly`, `expires_at` opcional em entradas gerenciadas, isolamento de crontab por usuário, ativar/desativar via PATCH.

use-cases / heartbeat-for-silent-jobs / punchline

Agora o silêncio é um alerta.

ANTES · OBSERVANDO O LOGabre dashboard · busca pelo último export · suspira · esquecevocê só percebe o job sumido na segunda
DEPOIS · OBSERVANDO O SILÊNCIO*/15 * * * * curl /silence-check?job=backup-prod-dbo alerta te alcança enquanto o silêncio ainda é pequeno
use-cases / heartbeat-for-silent-jobs / replaces

O que isto substitui

As ferramentas padrão para quando você quer um monitor de cron com paging. Cada uma é uma conta separada, uma fatura separada, uma API separada. Duas linhas de crontab e o endpoint de notificações fazem o mesmo trabalho.

  • orquestradores customizadosServiços de orquestração inteiros para o que são duas linhas de crontab
  • Healthchecks.ioUma conta SaaS só para receber um heartbeat HTTP
  • CronitorCobrança por monitor por algo que seu contêiner já faz
  • Dead Man's SnitchO padrão exato, vendido como assinatura
  • alarmes do AWS CloudWatch para cronLambda + alarmes + políticas IAM para uma linha velha
  • scripts customizados de coleta de heartbeatUm microsserviço para registrar um valor que o cron poderia simplesmente postar
use-cases / heartbeat-for-silent-jobs / cta

Pare de observar o caminho do sucesso. Observe a ausência do sucesso — é o único lugar onde as falhas silenciosas vivem.

use-cases / heartbeat-for-silent-jobs / related

Leia os outros