Hoy os quiero enseñar como montar un middleware que valide los estados de los componentes de tu infraestructura de un simple vistazo. Para ello vamos a usar los health checks.

¿Qué es?

Se trata de un middleware de comprobaciones de estado y bibliotecas que informa del estado de estos. Por ejemplo, si en nuestra solución estamos usando un SQL Azure, una Azure Redis Cache y un Azure Blob Storage, este middleware lo podremos configurar para poder chequear de forma rápida los estados de esos servicios.

Este middleware esta disponible desde la versión 2.2 de .NET Core y con el se pueden configurar diversos escenarios en tiempo real:

  • Comprobar el estado de una aplicación mediante sondeos con orquestadores de contenedores y equilibradores de carga. 
  • Supervisar el uso de la memoria, el disco y otros recursos del servidor físico para ver si el estado es correcto.
  • Dependencias de una aplicación, como bases de datos y puntos de conexión de servicio externo, para confirmar la disponibilidad y el funcionamiento.

Caso Práctico

A continuación, mostrare un caso de ejemplo. Para ello, voy a usar la base de la solución que monte en un post anterior sobre como añadir Azure Redis Cache a tu API. Voy a montar un heakth check para validar que la Azure Redis Cache esta disponible y sin ningún problema.

Para empezar, creo un proyecto nuevo de clases AzureRedisCache.HealthChecks, en el que voy a definir el check para la Azure Redis Cache. Esta clase para el check debe cumplir la interfaz IHealthCheck, para lo cual debemos instalar también el nuget Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.

La clase queda como:

En esta clase simplemente estamos chequeando la disponibilidad del servicio y en el caso de haber algún problema, lanzamos el Unhealth.

Para configurarlo en nuestra API, vamos a modificar el Startup de la siguiente forma:

  • En ConfiguredServices vamos a añadir el uso de nuestro HealthCheck

Vemos que definimos la validación de la propia API (self) y además el validador que hemos definido anteriormente para la Azure Redis Cache.

  • En Configure, necesitamos indicar el uso de HealtChecks, definiendo el tipo de respuesta, el route donde obtener el json de respuesta y los códigos de respuesta.

Si lanzamos nuestra api y vamos a /health, debemos obtener un json de este estilo:

Para forzar un estado fallido de la Redis cache, voy a cambiar la cadena de conexión de mis user-secrets de localhost a localhost1, por ejemplo. Ahora podemos ver en el json de salida el estado y el error de servicio de Redis Cache:

Con esto ya tendríamos trazada la validación de nuestro servicio externo. En el caso de querer añadir otros servicios, bastaría con definir el Custom Check y añadirlo a la configuración de nuestra API.

Es una forma primitiva de ver el estado de nuestros servicios, pero esto puede ampliarse, metiendo una vista html que nos muestre de una forma mas visual el estado de los servicios.

Os dejo el código completo del ejemplo en mi Github personal.

En posteriores posts iré añadiendo mas checks y una vista html, además de intentar generar un nuget para poder usarlo desde vuestros proyectos.

¡Un saludo!

Procesando…
¡Lo lograste! Ya estás en la lista.
Última modificación: mayo 20, 2020

Autor

Comentarios

Comenta o responde a los comentarios

Tu dirección de correo no será publicada.