¿Qué es Prometheus? Monitorización de Sistemas

febrero 15, 2025

Prometheus es un sistema de monitorización y alertas de código abierto, diseñado para recopilar y procesar métricas de aplicaciones e infraestructura. Funciona con un modelo pull, enviando peticiones HTTP periódicamente para recopilar datos de los objetivos configurados. Los datos recopilados se almacenan localmente en una base de datos personalizada y se pueden consultar mediante el lenguaje PromQL. Prometheus es altamente eficiente en la monitorización de sistemas distribuidos y está optimizado para funcionar con tecnologías modernas como Docker y Kubernetes.

Imagen 1:

Normalmente, las aplicaciones no generan métricas automáticamente, sino que requieren que los desarrolladores integren la instrumentación en el código fuente. Las Client Libraries simplifican este proceso, permitiendo definir e integrar la medición directamente en el código con pocas líneas. Esto se conoce como instrumentación directa. Prometheus ofrece Client Libraries para lenguajes populares como Go, Python, Java/JVM, Ruby y Rust. Además, existen bibliotecas de terceros para otros lenguajes como C#/.Net, Node.js, Haskell y Erlang.

No siempre es posible acceder al código fuente para insertar código, es decir, no se puede realizar la instrumentación directa. Un Exporter es un pequeño software que se instala junto con la aplicación de la que se desean obtener métricas. Recibe las peticiones de Prometheus, recopila datos de la aplicación, los convierte a un formato que Prometheus pueda entender y devuelve los resultados. Se puede visualizar un Exporter como un adaptador de datos entre la aplicación y Prometheus. A diferencia de la integración directa con Client Libraries, los Exporters utilizan un tipo de medición diferente llamado Custom Collectors o ConstMetrics.

Después de integrar Prometheus en las aplicaciones y configurar los Exporters, Prometheus necesita saber la ubicación exacta de las aplicaciones y los Exporters para poder monitorizarlos. En entornos dinámicos como la nube, los servicios pueden cambiar constantemente (crearse o eliminarse), por lo que no se puede proporcionar una lista estática de aplicaciones y Exporters. Esta lista quedaría obsoleta rápidamente, por lo que se necesita Service Discovery. Prometheus se integra con mecanismos de Service Discovery populares como Kubernetes, EC2 y Consul, lo que le permite encontrar automáticamente las aplicaciones que necesita monitorizar. Si su sistema no utiliza estos servicios, Prometheus también ofrece métodos de integración genéricos para otros sistemas.

Imagen 2:

Una vez que Prometheus encuentra la lista de objetivos a monitorizar a través del Service Discovery y el relabeling, necesita obtener datos de esos objetivos. Prometheus lo hace enviando peticiones HTTP, llamadas scrape, para recopilar las métricas. Al recopilar datos, Prometheus también registra información útil como: ¿el scrape fue exitoso?, ¿cuánto tiempo tardó en completarse? El scraping se configura para que se realice con frecuencia, generalmente cada 10 a 60 segundos por objetivo. Prometheus utiliza un modelo pull, en el que recolecta activamente datos de los objetivos de monitorización (a diferencia del modelo push).

Prometheus almacena los datos directamente en su servidor, utilizando una base de datos personalizada. En lugar de intentar construir un sistema de almacenamiento distribuido complejo, Prometheus opta por el almacenamiento local para que el sistema sea más fácil de operar y más confiable. La versión actual de Prometheus 2.0 puede recopilar millones de muestras de datos por segundo, lo suficientemente potente como para monitorizar miles de máquinas con un solo servidor Prometheus. Prometheus utiliza un algoritmo de compresión eficiente, con una tasa de compresión de 1.3 bytes por muestra de datos real. Se recomienda el uso de SSD para mejorar el rendimiento, pero no es obligatorio. Prometheus solo almacena datos en el servidor local, por lo que está limitado por la capacidad del disco duro de esa máquina. Esto puede ser problemático si se desea almacenar datos durante largos períodos de tiempo. Prometheus no tiene una solución para el almacenamiento de datos en múltiples máquinas (almacenamiento en clúster). Sin embargo, cuenta con las API remote read y remote write que permiten la conexión con sistemas de almacenamiento externos. Gracias a esto, se pueden realizar consultas de datos tanto de datos locales como de datos remotos sin tener que cambiar la forma de realizar las consultas.

Leave A Comment

Categorías

Recent Posts

Create your account