Monitorizar una única aplicación puede ser relativamente sencillo, sin embargo, cuando el número de aplicaciones es elevado, podemos tener ciertas dificultades debido a que tenemos más aplicaciones que mantener. En Hiberus trabajamos con proyectos que albergan una gran cantidad de microservicios o aplicaciones distribuidas. Recordamos que ninguna infraestructura está exenta de sufrir cualquier tipo de incidencia software o hardware. Por estos motivos, para plantearnos una arquitectura de microservicios es muy importante tener en cuenta que habrá que hacer uso de sistemas de monitorización robustos y que sean capaces de detectar, prevenir y corregir problemas en un tiempo razonable.
¿En qué consisten los sistemas de monitorización?
Un sistema de monitorización se encarga de realizar un seguimiento de las distintas aplicaciones o servicios de nuestra infraestructura. Concretamente, recopila KPIs y otros datos numéricos relacionados con el funcionamiento del sistema. A estos datos, se les denomina métricas.
Las métricas pueden recoger diferentes datos, como el uso de CPU de un microservicio específico, pero también pueden mostrar datos incrementales como el número de peticiones a un endpoint de una API REST. Así pues, según el tipo de información que muestran, las métricas se pueden clasificar principalmente en:
- Métricas de contador. Con estas, por ejemplo, se puede representar el número de veces que se ha reiniciado un microservicio.
- Métricas de series temporales. Para representar, por ejemplo, el uso de memoria RAM de un microservicio en las últimas 24 horas.
- Métricas de histograma. Facilitan representar, por ejemplo, el tiempo medio de respuesta de una petición a un servicio externo.
Aunque insistimos en que hay muchos más tipos de métricas.
Gracias a estas métricas los sistemas de monitorización facilitan las siguientes tareas:
- Recopilar información.
- Generar alertas automatizadas.
- Visualizar los datos mediante tablas, gráficas o listas.
- Establecer correlaciones entre datos.
- Analizar los datos obtenidos para detectar patrones.
Tener un sistema de monitorización robusto nos proporciona las métricas necesarias para que nuestra infraestructura esté lo mejor optimizada posible y nos facilita la detección de anomalías. Ejemplo de ello, es que una de las principales características de un sistema de monitorización es la posibilidad de generar alertas automatizadas si se sobrepasan los valores deseados en cualquiera de nuestros servicios, permitiéndonos reaccionar rápidamente.
¿Qué sistemas de monitorización podemos utilizar?
Existen múltiples sistemas de monitorización para nuestros sistemas y aplicaciones, pero en la actualidad recomendamos utilizar principalmente dos herramientas que son complementarias en el monitoreo de sistemas y aplicaciones. Se trata de Prometheus y Grafana:
- Prometheus es una herramienta de monitorización y alertas que es capaz de recopilar datos de todos nuestros microservicios basados en eventos o con modelo de comunicación síncrono, a través de métricas. Prometheus almacena esta información en una base de datos en tiempo real y proporciona un mecanismo de consulta sobre los mismos mediante su propio lenguaje (PromQL). Es altamente escalable y distribuible, lo que es ideal para monitorizar grandes infraestructuras y entornos distribuidos.
- Grafana es una plataforma de visualización de datos que permite crear paneles y representar métricas recogidas de distintas fuentes. Grafana es completamente personalizable, por lo que puede adaptarse a una amplia variedad de casos de uso, desde la monitorización de aplicaciones y servicios hasta la exploración de datos en tiempo real.
En definitiva, Prometheus recopila y almacena las métricas, mientras que Grafana permite al usuario visualizarlas en un formato amigable.
¿Qué son y para que sirven los exportadores?
Los exportadores o «exporters» sirven para obtener métricas de otros sistemas y convertirlas a un formato que Prometheus sea capaz de leer. Actúan de intermediarios entre las aplicaciones y Prometheus, de tal forma que permite que este último recolecte métricas de los distintos sistemas automáticamente para su posterior almacenamiento y análisis. Existen múltiples tipos de exportadores, y según su categoría, se pueden clasificar en:
- Bases de datos: permiten la integración de los bases de datos con Prometheus. Por ejemplo, se podría recopilar información sobre el número de operaciones de lectura y escritura por segundo y el tamaño de los índices, de una base de datos como pueda ser MongoDB.
- Hardware: permiten extraer información del hardware. Node-Exporter recopilaría información sobre sistemas Linux, mientras que WMI Exporter haría lo mismo de sistemas Windows.
- Sistemas de mensajería: permite extraer información de sistemas de mensajería. Se podría utilizar Kafka Exporter para obtener una visión detallada del rendimiento de los clusters, incluyendo información sobre el tamaño de las colas, el número de mensajes producidos y consumidos y el tamaño de los tópicos y brokers.
- HTTP: existen también exportadores HTTP que recopilan métricas de rendimiento, estadísticas y otros datos relevantes. Un ejemplo sería Apache Exporter, que permite monitorizar un servidor de Apache. El exportador se conectaría al servidor Apache y recopilaría la información sobre su rendimiento.
- API’s: recopilan información mediante la exposición de una API. Por ejemplo, el exportador de AWS CloudWatch, permite monitorizar el uso de AWS y exponer sus métricas a Prometheus. La exportación se realiza mediante una API de AWS, y permite recopilar información sobre el uso de recursos de AWS, uso de CPU, memoria, almacenamiento y tráfico de red.
En definitiva, haciendo uso de exportadores, se puede monitorizar cualquier sistema y convertir sus métricas a un formato que Prometheus pueda leer.
¿Qué podemos concluir?
Aunque es posible monitorizar cualquier tipo de sistema — desde gestores de bases de datos, hasta gestores de proyectos —, en el contexto de microservicios es todavía más importante su utilización por los siguientes motivos:
- Permite tener una vista del estado de todos los microservicios en tiempo real.
- Facilita la detección de errores en cascada.
- Permite identificar problemas de rendimiento, escalabilidad, disponibilidad y mantenibilidad.
- Proporciona información importante para que seamos capaces de tomar decisiones oportunas sobre la optimización de los distintos microservicios.
- Ayuda a detectar errores de forma prematura para que luego se pueda actuar en consecuencia rápidamente.
Como expertos en microservicios con más de 1000 aplicaciones gestionadas, en hiberus contamos con las capacidades, la experiencia y los conocimientos necesarios para ayudarte en la migración de tu negocio digital a una arquitectura basada en microservicios. ¿Quieres saber más? ¡No dudes en preguntarnos!
Créditos: Miriam Martínez Raso
¿Quieres más información sobre nuestra área de Microservicios?
Contacta con nuestro equipo de Microservicios