¿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.