En esta entrada vas a aprender qué es Prometheus, y cómo puedes usar esta herramienta de monitorización y alertas para supervisar tus sistemas y aplicaciones de una forma profesional. No te lo pierdas.
Contenidos
¿Qué es Prometheus?
Prometheus es un software especializado como sistema de monitorización y alertas escrito en el lenguaje de programación Go. Todos los datos y métricas se almacenan en la base de datos como series temporales (junto al instante de tiempo en el que el valor se ha registrado). También es posible añadir etiquetas de tipo clave-valor junto a estas métricas.
Las métricas que almacena Prometheus pueden ser de cualquier tipo, y dependerán de la naturaleza de la aplicación o del sistema que se quiera monitorizar. Por ejemplo, puede ser el uso de CPU o de memoria, número de conexiones, número de peticiones o cantidad de sesiones activas. Todas las mediciones y métricas recogidas ayudarán a diagnosticar errores o problemas de servicio en los sistemas y aplicaciones que se monitorizan.
Arquitectura
Prometheus tiene 3 componentes principales.
- Servidor: Almacena los datos de las métricas.
- Librería Cliente: Se usa para calcular y exponer las métricas al cliente.
- Gestor de alertas: Genera alertas basadas en reglas.
Para monitorizar una aplicación deberemos configurar con código la librería de cliente de forma que exponga la métrica que queremos registrar. Ahora que la aplicación expone nuestra métrica, ejecutaremos el servidor de Prometheus y lo configuraremos para extraerla de la aplicación con unos intervalos de tiempo establecidos.
También dispone de numerosos exporters
Exporters más comunes en Prometheus
Los exporters son componentes fundamentales en el ecosistema de Prometheus. Se encargan de recolectar métricas desde sistemas o servicios externos y exponerlas en el formato adecuado para que Prometheus pueda recogerlas. Por ejemplo, para diferentes sistemas como bases de datos relacionales y no relacionales, sistemas de mensajería, sistemas de almacenamiento y aplicaciones. Puedes consultar el listado completo de exporters aquí.
Algunos de los exporters más utilizados:
- Node Exporter: Es el exporter más común para recolectar métricas de sistemas operativos Linux. Proporciona información sobre CPU, memoria, disco, red, etc. Ideal para monitorizar servidores físicos o virtuales.
- Blackbox Exporter: Permite realizar pruebas externas (blackbox) a endpoints HTTP, ICMP, DNS, TCP, etc. Es útil para comprobar la disponibilidad de servicios desde el punto de vista del usuario. Muy usado para monitorizar APIs y webs.
- MySQL Exporter: Recolecta métricas internas de bases de datos MySQL o MariaDB, como conexiones activas, uso de buffers, tiempo de respuesta, etc. Facilita la observabilidad de bases de datos críticas.
- Kafka Exporter: Permite extraer métricas de brokers Kafka como lag de consumidores, tráfico por tópico, estado de particiones, etc. Fundamental para arquitecturas orientadas a eventos.
Métricas en Prometheus
El tipo de métrica contador es un valor que solo se puede incrementar o bien resetear. Se puede usar para contar el número de peticiones o de errores en una aplicación, que son métricas que nunca se reducen.
Gauge o medidor es un valor numérico que puede incrementarse o decrementar. Un ejemplo puede ser el número de servidores en un sistema distribuido.
El histograma representa los valores en agrupaciones predefinidas y acumuladas en el tiempo. Por ejemplo, se puede usar un histograma para medir los tiempos de respuesta de nuestra aplicación en los intervalos de tiempo establecidos para cada petición de un cliente.
Gestión de Alertas con Alertmanager
Prometheus no solo recolecta métricas: también permite generar alertas cuando algo sale de lo normal. Estas alertas son gestionadas por un componente separado: Alertmanager.
Cuando se cumplen ciertas condiciones definidas en las reglas de alerta (alert rules), Prometheus envía eventos a Alertmanager. El componente se encarga de agrupar alertas similares, silenciar alertas conocidas, aplicar deduplicación y del envío de notificaciones.
Estas notificaciones se pueden enviar por varios canales, por ejemplo email, Slack, Microsoft Teams o Webhooks personalizados.
Ejemplo de regla de alerta (YAML):
- alert: CPUAlta
expr: avg(rate(node_cpu_seconds_total{mode="user"}[5m])) > 0.9
for: 2m
labels:
severity: critical
annotations:
summary: "Uso de CPU muy alto"
description: "La CPU está al {{ $value }} durante más de 2 minutos"
Para configurar tus alertas, usa for para evitar falsos positivos temporales y añade contexto en los annotations para facilitar la reacción del equipo.
Prometheus y Grafana
Grafana es el componente que nos permitirá crear dashboards para comprender lo que está pasando en nuestro sistema monitorizado. Se integra perfectamente con el software de Prometheus que, aunque ya nos proporciona estos gráficos en su propia interfaz, están pensados como un mecanismo de testing o debug.
Para configurar Prometheus como fuente de datos en Grafana, debes indicar en Grafana la URL de tu servidor de Prometheus (por ejemplo, http://localhost:9090 si está en el mismo servidor).
¿Quieres Convertirte en experto en Análisis de Datos?
Una vez que hayas configurado Prometheus como fuente de datos, puedes empezar a crear paneles y gráficos en Grafana. En la sección Explore en Grafana puedes construir tus consultas, y crear visualizaciones personalizadas como gráficos de barras o tablas.
Grafana también permite configurar alertas basadas en las métricas de Prometheus, definiendo las condiciones y acciones que necesites.
Prometheus en Cloud
Existen algunos servicios en la nube basados en Prometheus que ofrecen soluciones de monitoreo y métricas para entornos cloud:
Amazon Managed Service for Prometheus (AMP): Amazon Web Services (AWS) ofrece un servicio gestionado de Prometheus llamado AMP. AMP simplifica la implementación y el mantenimiento de Prometheus en AWS, lo que te permite recopilar, consultar y visualizar métricas de forma escalable y sin preocuparte por la infraestructura subyacente.
Prometheus en Azure Monitor: Microsoft Azure ofrece integración con Prometheus a través de Azure Monitor. Puedes configurar la recopilación de métricas de Prometheus en tus aplicaciones y servicios desplegados en Azure, lo que te permite visualizar y analizar los datos de forma centralizada en Azure Monitor.
Cómo Usar Prometheus
Puedes descargar la versión compilada para tu sistema operativo desde la página oficial de descargas.
Una vez descargado, lo descomprimimos con el comando de linux tar – xvzf.
Antes de ejecutarlo, podemos ver el fichero de configuración prometheus.yml:
# la configuración global
global:
scrape_interval: 15s
# Una configuración que contiene solamente un endpoint para extraer métricas
# Aquí se configura como punto de extracción el propio Prometheus
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
En esta configuración básica de pruebas, hemos establecido el intervalo de extracción en 15 segundos. También hemos configurado un endpoint para extraer métricas que se corresponde con el mismo Prometheus, que expone sus métricas en el puerto 9090.
Ahora, podemos ejecutarlo desde su directorio con el siguiente comando, al que le especificamos el fichero de configuración que acabamos de escribir:
./prometheus --config.file=prometheus.yml
Para acceder a la interfaz web en la que podremos realizar consultas y ver las gráficas entraremos en cualquier navegador y escribiremos:
http://localhost:9090/
Si navegamos a Status -> Targets podemos ver que tenemos un endpoint configurado hacia el propio Prometheus, la duración del último escaneado y su frecuencia. Si existiera algún error también podríamos ver aquí el mensaje.
Siguientes Pasos y Formación
A continuación, te recomiendo dos cursos online para explorar y aprender a usar Prometheus en profundidad disponibles en la plataforma Udemy:
Monitorización y Alertas con Prometheus
Aprende a monitorizar tus aplicaciones e infraestructura desde cero con este curso de devops. Te enseñará a instalar y configurar Prometheus en un entorno profesional, visualizar datos en Grafana y configurar alertas.
Prometheus | Curso práctico completo de Monitorización y Alertas
Este curso contiene más de 10 horas de vídeo y te permitirá aprender Prometheus y Grafana a un nivel avanzado con ejemplos prácticos. Es un buen complemento al curso anterior que incluye ejemplos en cloud y diferentes integraciones.
Preguntas Frecuentes Prometheus – FAQ
¿Qué se puede monitorizar con Prometheus?
Prometheus puede almacenar y monitorizar diversas métricas. Frecuentemente se almacenan el uso de CPU o de memoria, el número de conexiones, el número de peticiones o la cantidad de sesiones activas en un servidor.
¿Dónde almacena Prometheus las métricas y logs?
Prometheus usa una base de datos interna orientada a series temporales en la que almacena las métricas en tiempo real. Almacena los índices en LevelDB y organiza los datos en particiones de un tamaño fijo.
¿Cómo funciona el exporter de Prometheus?
Los exporters ayudan a exportar métricas de sistemas externos para usar en Prometheus. Estos sistemas pueden ser bases de datos o diferentes aplicaciones. Algunos de estos exporters son mantenidos en el repositorio oficial y otros los ofrecen organizaciones externas, a las que les interesa disponer de esta integración.
A continuación, el vídeo-resumen. ¡No te lo pierdas!