En esta guia mostraremos como configurar nuestro docker-compose para que se ejecute un stack de monitoreo para RabbitMQ con Prometheus y Grafana.
Estructura del proyecto:
Requisitos
Lo primero que necesitamos es tener instalado Docker y Docker Compose.
Configuración
RabbitMQ
Para configurar RabbitMQ, vamos a crear un Dockerfile que nos permita instalar el plugin de Prometheus y exponer el puerto 15692.
Prometheus
Para configurar Prometheus, vamos a crear un archivo prometheus.yml
que nos permita configurar el scrape de RabbitMQ.
En las configuraciones de scrape_configs
estamos configurando el scrape de RabbitMQ en el puerto 15692, que es el puerto interno que expone el plugin de Prometheus, en su ruta por defecto /metrics
.
El static_configs es la lista de targets que vamos a monitorear. En este caso, solo tenemos un target que es rmq0:15692
, que es el nombre del servicio de RabbitMQ en el archivo compose.yaml
, el cual tiene por hostname rmq0
.
Grafana
En este caso tenemos que configurar nuestros dashboards y datasources. Para ello, vamos a crear una carpeta grafana
con las siguientes subcarpetas y archivos:
-
dashboards
: En esta carpeta vamos a guardar los dashboards que queremos importar a Grafana. En este caso, vamos a guardar el archivorabbitmq-overview.json
que contiene el dashboard de RabbitMQ. Lo puedes encontrar aquí. -
dashboards-provisioning
: En esta carpeta vamos a guardar el archivodashboards.yml
que nos permite configurar el provisioning de dashboards en Grafana. -
datasources
: En esta carpeta vamos a guardar el archivodatasources.yml
que nos permite configurar el datasource de Prometheus en Grafana.
Docker Compose
Finalmente, vamos a crear nuestro nucléo de configuración en el archivo compose.yaml
.
En este archivo estamos configurando tres servicios:
-
prometheus
: Configuramos el servicio de Prometheus con el archivoprometheus.yml
y el puerto 9090, conectado a la redrabbitmq-prometheus
, también configuramos un volumen para guardar los datos de Prometheus. -
grafana
: Configuramos el servicio de Grafana con el puerto 3000, conectado a la redrabbitmq-prometheus
, también le decimos las credenciales de administrador y configuramos los volúmenes para el provisioning de dashboards y datasources. -
rabbitmq
: Configuramos el servicio de RabbitMQ con el Dockerfile que creamos anteriormente, exponemos los puertos 15672 y 15692, conectado a la redrabbitmq-prometheus
, configuramos el hostname y los volúmenes para guardar los datos y logs de RabbitMQ.
los puertos 15673 y 15693 son los puertos que vamos a usar para acceder a la interfaz de RabbitMQ y los puertos 15693 y 15692 son los puertos que vamos a usar para el scrape de Prometheus.
Ejecución
Para ejecutar el stack de monitoreo, solo necesitamos ejecutar el siguiente comando:
si tienes la versión docker-compose V1:
si tienes la versión docker-compose V2:
el flag
-d
es para que se ejecute en segundo plano. Si no lo usas, verás los logs de los servicios en la terminal.
Una vez que todos los servicios estén corriendo, podemos acceder a la diferentes interfaces:
- Prometheus: http://localhost:9090
- Grafana: http://localhost:3000
- RabbitMQ: http://localhost:15673
- RabbitMQ Prometheus Metrics: http://localhost:15693/metrics
Comprobar si Prometheus está scrapeando las métricas de RabbitMQ
Para comprobar si Prometheus está scrapeando las métricas de RabbitMQ, vamos a la interfaz de Prometheus http://localhost:9090 y ahora nos vamos a la pestaña Status
y hacemos click en Targets
.
Ahí vamos a ver que el target rmq0:15692
está en estado UP
y que la última vez que se scrapeó fue hace unos segundos.
Crear una cola en RabbitMQ
una vez entremos a la interfaz de RabbitMQ, y nos logueemos con las credenciales por defecto que son guest:guest
, vamos a crear una cola para ver como se refleja en los dashboards de Grafana.
Para ello, vamos a la pestaña Queues
y hacemos click en Add a new queue
.
como nombre de la cola vamos a poner test_prometheus
y hacemos click en Add queue
.
Ahora hacemos click en la cola que acabamos de crear o nos vamos al siguiente link /test_prometheus y vamos a ver que la cola está vacía.
vamos a enviar un mensaje a la cola, para ello, hacemos click en Publish message
y en el campo Payload
ponemos el mensaje que queremos enviar, por ejemplo Hello World!
y hacemos click en Publish message
.
Ver los dashboards en Grafana
Ahora vamos a la interfaz de Grafana http://localhost:3000 y nos logueamos con las credenciales que configuramos en el archivo compose.yaml
que son admin:grafana
.
Una vez logueados, vamos a la pestaña Dashboards
Ahí vamos a ver que el dashboard RabbitMQ-Overview
está disponible, hacemos click en él y vamos a ver las métricas de RabbitMQ.
Si no ves el dashboard, puedes importarlo manualmente. Para ello, haz click en
new
y luego enimport
y pega el siguiente codigo10991
en la opcionFind and import dashboards for common applications at grafana.com/dashboards
ahora podemos ver que en el dashboard de RabbitMQ, en la sección Queues
está la cola que acabamos de crear y que tiene un mensaje en la cola.
Conclusión
Llegamos al final de esta extensa guía, que tiene todo lo que necesitas para configurar un stack de monitoreo para RabbitMQ con Prometheus y Grafana.
Si tienes alguna duda, no dudes en dejar un comentario o abrir un issue en este repositorio.