Los health checks son comprobaciones que se realizan periódicamente para asegurarnos de que una o más partes de nuestra aplicación estén funcionando correctamente. Son una pieza clave para monitorear la salud de nuestra app, ya que sirven para garantizar disponibilidad y rendimiento.
En este caso vamos a enfocarnos en health checks que comprueban que nuestra app está ejecutándose correctamente en el servidor. Por suerte para nosotros, Rails 7 incorporó una acción por defecto para monitorear nuestra app.
El monitoreo de nuestros proyectos podría (y debería 🙃) incluir comprobaciones de muchos elementos de nuestra app como servidor, base de datos, recursos externos, uso de memoria, logs y registros, etc. En este caso tomamos como punto de partida los health checks que comprueban que nuestra app está ejecutándose en el servidor y respondiendo solicitudes correctamente.
Antes de Rails 7
Necesitábamos crear una ruta y un controlador manualmente.
# config/routes.rb
get '/health_check', to: 'health_check#show'
# app/controllers/health_check_controller.rb
class HealthCheckController < ApplicationController
# Si algo falla, se captura la excepción y retorna un status code 503.
rescue_from(Exception) { render head: 503 }
def show
# Si todo va bien, retorna un status code 200.
render head: 200
end
end
Desde Rails 7 en adelante
Ahora, Rails trae por defecto un controlador HealthController con la acción #show que está mapeada a la ruta /up. Esto nos evita tener que crear controladores y rutas a mano, además de que promueve la adopción de convenciones que facilitan y mejoran nuestros proyectos. El código fuente puede revisarse aquí.
Monitoreando
De esta forma, alcanza con usar cualquier herramienta de monitoreo y configurarla para que haga una solicitud a nuestra_app.com/up.
Algunas herramientas de monitoreo populares son updown.io, uptimerobot.com o freshping.io, entre otras.