¿Qué es Prometheus?

Prometheus es un software libre para monitorización y alerta de aplicaciones y sistemas que fue creado en SoundCloud. Lo que hace Prometheus es escrapear las rutas que le digamos, donde estarán los exporters y almacenarlo para su posterior consulta y análisis.

No lo he probado demasiado aún y aún siendo sencillo hasta que no me he puesto a probarlo no he visto claramente como funciona, así que voy a aprovechar para ir documentando lo que he hecho y lo que estoy haciendo en mi cluster de raspberry pi.

Instalando en Raspberry Pi

Lo primero que necesitamos es bajarnos el servidor, lo podemos encontrar en el siguiente enlace. Si tenemos una Raspberry Pi 1 o 2 debemos usar la versión armv6 si tenemos una Raspberry Pi 3 deberemos descargar la versión armv7. Dejo el ejemplo con la versión en la que estoy trabajando en el momento de escribir este post

Descargamos el fichero correspondiente, en mi caso lo voy a instalar en una Raspberry Pi 1.

wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-armv6.tar.gz

Lo descomprimimos.

tar zxvf prometheus-2.3.2.linux-armv6.tar.gz

Aunque no lo haya dicho todos estos pasos deben realizarse dentro de la Raspberry Pi donde queramos que se encuentre el servidor de Prometheus.

Lo ejecutamos.

cd prometheus-2.3.2.linux-armv6/ ./prometheus --config.file=prometheus.yml

Ahora podremos acceder a Prometheus a través de la IP de las Raspberry Pi y del puerto 9090, http://192.168.1.31:9090 en mi caso.

Hasta aquí mas o menos en lo que viene en la documentación oficial, con esto tendremos un servidor de Prometheus donde ya podremos comenzar a realizar consultas sobre los datos que escrapea por defecto, que son los propios del servidor de Prometheus. Según vaya tocando cosas, como el fichero de configuración iré documentando lo que vaya aprendiendo. Si quieres avanzar rápido y no tienes problemas con el inglés te recomiendo que sigas con la documentación oficial.

Ejecutando el servidor como un servicio.

Hasta ahora siguiendo la documentación solo he llegado a como ejecutarlo a mano, pero no le veo demasiado sentido, quiero que sea al sistema quien se encargue de levantarlo cuando lo arranque, para ello he realizado lo siguiente:

Creamos un usuario para prometheus y los directorios donde se guardará la configuración y los datos.

sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /var/lib/prometheus sudo mkdir /etc/prometheus sudo chown prometheus:prometheus /var/lib/prometheus sudo chown prometheus:prometheus /etc/prometheus

Enlazamos el ejecutable que hemos descomprimido antes al path del sistema

sudo ln -s /home/pi/prometheus-2.3.2.linux-armv6/prometheus /usr/local/bin/

Copiamos las configuraciones a nuestra carpeta de configuración nueva

sudo cp ./prometheus.yml /etc/prometheus/prometheus.yml sudo cp -R consoles /etc/prometheus sudo cp -R console_libraries /etc/prometheus

Creamos el fichero del servicio

sudo nano /etc/systemd/system/prometheus.service

Y le añadimos este contenido dentro.

[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target

Ahora actualizamos los servicios del sistema para añadir el nuestro, lo arrancamos y lo activamos.

sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus

Y ya deberíamos tener en el puerto 9090 nuestro Prometheus corriendo.

Posibles errores y cómo gestionarlos

A la hora de crear el servicio he ido lidiando con diferentes errores hasta llegar a lo que he pegado anteriormente, para comprobar los errores que va dando podemos ejecutar sudo systemctl status prometheus lo cual nos mostrará el estado del servicio

Otra opción para depurar en mas detalle los errores es ejecutar el comando que va a ejecutar el servicio para ver el log completo que está devolviendo, esto es lo mismo que como lo ejecutamos la primera vez, para ello ejecutaremos lo siguiente:

sudo -u prometheus /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries

Esto debería arrancar el servidor y en caso de fallar mostrar el motivo del error, la mayoría de casos que me he encontrado han sido por permisos en las carpetas nuevas

Conclusión

Como no quiero hacer post demasiado largos no he contado nada de como funciona la consola de Prometheus, la configuración, reglas, consultas, etc. Para eso os remito de nuevo a la documentación oficial o que trasteéis todo lo que podáis, que para eso están las Raspberries.

Lo siguiente que voy a documentar es como exportar datos de las propias Raspberries para poder consultarlos desde Prometheus. Cualquier duda puedes preguntarme por gnusocial.net.

Fuentes