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?
¿Por qué las tareas cron fallan sin avisar a nadie?
¿Qué periodo y qué margen debo usar?
¿Puede detectar una tarea que empieza y luego se cuelga?
¿Puedo ver por qué falló la tarea?
¿Qué pasa si se filtra la URL de ping?
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