Pular para o conteúdo principal

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?
Crie um monitor de heartbeat, que gera uma URL de ping, e chame essa URL no fim de cada execução bem-sucedida. Acrescentar curl -fsS $URL ao job costuma ser a única mudança. Você define com que frequência espera o ping e quanto ele pode atrasar, e o monitor alerta quando as chamadas param de chegar.
Por que cron jobs falham sem alertar ninguém?
Porque um job que nunca é executado não produz nada para ser detectado. Alertas de erro disparam quando um job roda e falha. Eles não disparam por um crontab cuja linha foi apagada, nem por um contêiner que parou de subir. Não há requisição para vigiar nem código de saída para ler, então o heartbeat precisa vir do próprio job.
Que período e que tolerância devo usar?
O período é a frequência com que o job realmente roda, não a 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 saudável. Assim que há cinco intervalos registrados entre pings bem-sucedidos, o monitor compara o período declarado com o real e avisa quando eles não batem, o que, para um job de hora em hora, acontece no mesmo dia.
Dá para detectar um job que começa e depois trava?
Sim, com um sinal de início e um tempo máximo de execução. Chame /start antes do trabalho, termine com o código de saída, e a execução passa a ser cronometrada. Um job que começou e nunca vai terminar é detectado enquanto ainda está travado, e não um período inteiro depois.
Consigo ver por que o job falhou?
Sim. Passe o código de saída no ping de término e envie o log junto num POST. O monitor guarda os primeiros 4 KB desse corpo, então mande o fim do log via pipe, e a última falha traz o código de saída ao lado das linhas em volta dela, para você ler na página do monitor em vez de na máquina que rodou o job.
O que acontece se a URL de ping vazar?
Rotacione a URL pela página do monitor ou pela API. Quem tiver a URL pode marcar o job como saudável, ou seja, pode manter uma queda real invisível. A rotação mantém os incidentes, o histórico, os links de compartilhamento e a posição do monitor na página de status. A URL antiga continua funcionando por 24 horas por padrão, para que nada fique em silêncio sem aviso, e você pode encerrar essa sobreposição na hora quando a URL realmente vazou.

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

Links

Comece em menos de 5 minutos.

Comece grátis

funcionalidades · preços · notas