verificações de heartbeat
Saiba quando uma tarefa agendada para de rodar
Um cron job que para de rodar não gera erro nem deixa nada para consultar, porque o que você quer verificar é um job que não está lá. Um heartbeat inverte a direção: seu job chama uma URL que fornecemos, e avisamos você quando as chamadas param.
A falha que nada reporta
Um job que falha de forma ruidosa é o caso fácil. Ele termina com código diferente de zero, algo detecta isso e alguém é acionado. O caso caro é o job que simplesmente deixa de ser executado, porque a linha sumiu do crontab numa edição ou porque o contêiner que o hospeda não sobe mais. Não sobra nenhum processo para falhar, então nada é reportado, e o painel continua tão verde quanto estava quando o job ainda funcionava. Foi assim que o GitLab descobriu o problema no backup noturno dele, com meses de atraso.
Um período e uma tolerância ajustados ao que o job realmente faz
Você define com que frequência espera o ping e quanto ele pode atrasar antes de contar como falha. Um job que roda de hora em hora com tolerância de dez minutos entra em falha dez minutos depois da execução perdida, e o alerta vem assim que o número de confirmações é atingido. Defina o período pela frequência com que o job realmente roda, não pela que você gostaria: com um período mais curto que a cadência real, toda execução já está atrasada quando a próxima começa, e o monitor oscila a noite inteira por um job que está bem.
Você não precisa acertar o período de primeira
Assim que há cinco intervalos registrados entre pings bem-sucedidos, o monitor compara o que você declarou com o que o job realmente faz e avisa quando os dois não batem, em qualquer direção. Um job de hora em hora recebe esse veredito no mesmo dia, e um noturno depois de uns cinco dias. Um período apertado demais aciona você à toa. Um folgado demais deixa um job morto passar despercebido por mais tempo do que precisava.
Diga mais do que “estou vivo”
A URL pura diz que o job chegou ao fim. Um segmento de caminho depois dela diz o que o ping significa. Chamar /start antes do trabalho cronometra a execução. Se em vez disso você passar o código de saída, um código diferente de zero faz o monitor falhar na hora, sem esperar o período acabar, e essa é a diferença entre saber do problema às 03:05 ou às 04:15. Os primeiros 4 KB do corpo de um POST ficam guardados como a saída daquela execução, então, se você mandar o fim do log via pipe, o código de saída e as linhas em volta da falha ficam juntos, e não numa máquina que você precisa ir procurar.
O job que começou e travou
Um heartbeat simples não enxerga este caso. O job começou, travou e nunca mais vai mandar ping. Combinar /start com um ping de término dá uma duração à execução, e um tempo máximo de execução pega o job enquanto ele ainda está travado. Sem isso, você espera o período inteiro antes que algo seja dito, o que, para um job noturno, é um dia.
A URL de ping é uma credencial
Quem tiver a URL pode marcar o job como saudável, ou seja, quem tiver a URL pode manter uma queda real invisível. Por design, ela se espalha por crontabs, configuração de CI e runbooks, então precisa ser rotacionada quando vaza ou quando sai alguém que a conhecia. Rotacione pela página do monitor ou pela API, e o monitor mantém seus incidentes, histórico, links de compartilhamento e posição na página de status. A URL antiga continua funcionando por 24 horas por padrão, porque uma URL que morre na hora não gera alerta: ela só fica em silêncio. Veja quando a antiga foi usada pela última vez e encerre a sobreposição antes. Se ela vazou de verdade, encerre na hora.
Use ao lado das verificações que vigiam sua porta de entrada
Um heartbeat sabe uma coisa só: se o seu job deu sinal de vida. Ele nunca vai poder dizer que o seu site caiu. Ele fica na mesma lista de monitores que as verificações HTTP, TLS e de domínio que vigiam a porta de entrada, e chega à mesma página de status e aos mesmos canais de alerta. Heartbeat é um dos nove tipos de verificação que oferecemos, não uma ferramenta separada para operar.
Um backup noturno que se reporta sozinho
curl -fsS $URL/start # antes do trabalho
./nightly-backup.sh > backup.log 2>&1
code=$?
tail -c 4000 backup.log | curl -fsS --data-binary @- "$URL/$code"
Perguntas frequentes
Como monitorar um cron job?
Por que cron jobs falham sem alertar ninguém?
Que período e que tolerância devo usar?
Dá para detectar um job que começa e depois trava?
Consigo ver por que o job falhou?
O que acontece se a URL de ping vazar?
Visão geral
- Direção seu job nos chama
- Sinais início, sucesso, falha, código de saída
- Saída da execução corpo do POST guardado por execução
- Job atrasado período mais uma janela de tolerância
- URL de ping rotacionável, 24 h de sobreposição
- Preço para começar grátis, sem cartão