Saltar al contenido principal

comprobaciones heartbeat

Sepa cuándo una tarea programada deja de ejecutarse

Una tarea cron que deja de ejecutarse no produce ningún error ni deja nada que consultar, porque lo que usted quiere comprobar es una tarea que no está ahí. Un heartbeat invierte la dirección: su tarea llama a una URL que le damos, y le avisamos cuando las llamadas se detienen.

El fallo del que nada avisa

Una tarea que falla de forma ruidosa es el caso fácil. Termina con un código distinto de cero, algo lo detecta y alguien recibe un aviso. El caso costoso es la tarea que deja de ejecutarse por completo, porque alguien borró su línea del crontab o el contenedor que la aloja ya no arranca. No queda ningún proceso que pueda fallar, así que nada se informa, y el panel sigue tan verde como cuando la tarea aún funcionaba. Así descubrió GitLab el problema de su copia de seguridad nocturna, con meses de retraso.

Un periodo y un margen ajustados a lo que la tarea hace de verdad

Usted indica cada cuánto espera el ping y cuánto puede retrasarse antes de contar como fallo. Una tarea que se ejecuta cada hora con un margen de diez minutos pasa a fallar diez minutos después de la ejecución perdida, y la alerta llega en cuanto se alcanza el número de confirmaciones. Fije el periodo según la frecuencia real de la tarea, no la que le gustaría que tuviera: con un periodo más corto que la cadencia real, cada ejecución ya va tarde cuando empieza la siguiente, y el monitor oscila toda la noche por una tarea que funciona bien.

No tiene que acertar con el periodo a la primera

En cuanto hay cinco intervalos registrados entre pings correctos, el monitor compara lo que usted declaró con lo que la tarea hace realmente, y se lo indica cuando no coinciden, en cualquiera de los dos sentidos. Una tarea horaria obtiene ese veredicto el mismo día, y una nocturna al cabo de unos cinco días. Un periodo demasiado ajustado le envía avisos sin motivo. Uno demasiado holgado deja una tarea muerta sin detectar durante más tiempo del necesario.

Diga algo más que «sigo vivo»

La URL sin más indica que la tarea llegó al final. Un segmento de ruta añadido detrás indica qué significa el ping. Llamar a /start antes del trabajo mide la duración de la ejecución. Si en lugar de eso pasa el código de salida, uno distinto de cero hace fallar el monitor de inmediato en vez de esperar a que se agote el periodo, que es la diferencia entre enterarse a las 03:05 y a las 04:15. Los primeros 4 KB del cuerpo de un POST se guardan como la salida de esa ejecución, así que, si pasa el final del log por una tubería, el código de salida y las líneas que rodean el fallo quedan juntos, en vez de en una máquina que tiene que ir a buscar.

La tarea que empezó y se quedó colgada

Un heartbeat simple no puede ver este caso. La tarea empezó, se colgó y nunca volverá a enviar un ping. Combinar /start con un ping final da una duración a la ejecución, y un tiempo máximo de ejecución la detecta mientras todavía está colgada. Sin eso, hay que esperar el periodo entero antes de que se diga nada, lo que en una tarea nocturna es un día.

La URL de ping es una credencial

Cualquiera que la tenga puede marcar la tarea como sana, lo que significa que cualquiera que la tenga puede mantener invisible una caída real. Por diseño se reparte por crontabs, configuración de CI y runbooks, así que hay que rotarla cuando se filtra o cuando se va alguien que la conocía. Rótela desde la página del monitor o mediante la API y el monitor conserva sus incidentes, su historial, sus enlaces compartidos y su lugar en la página de estado. La URL antigua sigue funcionando 24 horas por defecto, porque una URL que muere al instante no genera una alerta: simplemente se queda en silencio. Fíjese en cuándo se usó por última vez la antigua y termine antes el solapamiento. Si de verdad se filtró, termínelo de inmediato.

Úselo junto a las comprobaciones que vigilan su puerta de entrada

Un heartbeat sabe una sola cosa: si su tarea se reportó. Nunca podrá decirle que su sitio web está caído. Está en la misma lista de monitores que las comprobaciones HTTP, TLS y de dominio que vigilan la puerta de entrada, y llega a la misma página de estado y a los mismos canales de alerta. Heartbeat es uno de los nueve tipos de comprobación de este servicio, no una herramienta aparte que tenga que operar.

Una copia de seguridad nocturna que informa por sí misma

curl -fsS $URL/start          # antes del trabajo

./nightly-backup.sh > backup.log 2>&1
code=$?

tail -c 4000 backup.log | curl -fsS --data-binary @- "$URL/$code"

Preguntas frecuentes

¿Cómo monitoreo una tarea cron?
Cree un monitor heartbeat, que genera una URL de ping, y llame a esa URL al final de cada ejecución correcta. Añadir curl -fsS $URL a la tarea suele ser todo el cambio. Usted fija cada cuánto espera el ping y cuánto puede retrasarse, y el monitor le avisa cuando las llamadas dejan de llegar.
¿Por qué las tareas cron fallan sin avisar a nadie?
Porque una tarea que nunca se ejecuta no produce nada que detectar. Las alertas de errores saltan cuando una tarea se ejecuta y falla. No pueden saltar por un crontab del que se borró la línea ni por un contenedor que dejó de arrancar. No hay ninguna petición que vigilar ni código de salida que leer, así que el heartbeat tiene que venir de la propia tarea.
¿Qué periodo y qué margen debo usar?
El periodo es la frecuencia con la que la tarea se ejecuta realmente, no la que a usted le gustaría. Con un periodo más corto que la cadencia real, cada ejecución ya va tarde cuando empieza la siguiente, y el monitor oscila toda la noche por una tarea sana. En cuanto hay cinco intervalos registrados entre pings correctos, el monitor compara el periodo declarado con el real y le avisa cuando no coinciden, lo que en una tarea horaria ocurre el mismo día.
¿Puede detectar una tarea que empieza y luego se cuelga?
Sí, con una señal de inicio y un tiempo máximo de ejecución. Llame a /start antes del trabajo, termine con el código de salida y la ejecución queda cronometrada. Una tarea que empezó y nunca terminará se detecta mientras sigue colgada, no un periodo entero después.
¿Puedo ver por qué falló la tarea?
Sí. Pase el código de salida en el ping final y envíe el log con él en un POST. El monitor guarda los primeros 4 KB de ese cuerpo, así que pase el final del log por una tubería y el último fallo mostrará el código de salida junto a las líneas que lo rodean, legible en la página del monitor en vez de en la máquina que ejecutó la tarea.
¿Qué pasa si se filtra la URL de ping?
Rótela desde la página del monitor o mediante la API. Cualquiera que tenga la URL puede marcar la tarea como sana, lo que significa que puede mantener invisible una caída real. La rotación conserva los incidentes, el historial, los enlaces compartidos y el lugar del monitor en la página de estado. La URL antigua sigue funcionando 24 horas por defecto para que nada se quede en silencio sin avisar, y puede terminar ese solapamiento de inmediato cuando la URL se haya filtrado de verdad.

De un vistazo

  • Dirección su tarea nos llama
  • Señales inicio, éxito, fallo, código de salida
  • Salida de la ejecución cuerpo del POST guardado por ejecución
  • Tarea retrasada periodo más un margen
  • URL de ping rotable, 24 h de solapamiento
  • Precio para empezar gratis, sin tarjeta

Enlaces

Empiece en menos de 5 minutos.

Empezar gratis

funciones · precios · notas