Monitorizar la RaspberryPi con Docker

En esta entrada vamos a explicar como montar el software rpi-monitor que realizó Xavier Berger como necesidad de controlar y monitorizar las RaspberryPi que se montan en entornos empresariales, aunque nos sirve para el entorno doméstico.

Este software nos permite visualizar las métricas del estado de los dispositivos en tiempo real, es decir, nos da valores del uso de CPU, consumo de RAM, espacio en disco,... en definitiva nos aporta datos del sistema necesarios para controlar la RaspberryPi.

Usaremos docker para desplegar el servicio, el software cuenta con paquete deb y repositorio disponible en Raspbian.

Necesitamos clonar estos dos repositorios de git para generar la imagen de docker

mkdir rpi-monitor && cd rpi-monitor
git clone https://github.com/balena-io-library/resin-rpi-raspbian/
git clone https://github.com/XavierBerger/Docker-RPi-Monitor

Compilamos la imagen del primer repositorio que es la base necesaria para compilar la imagen de rpi-monitor, cambiando la distribución a stretch en el Dockerfile

cd resin-rpi-raspbian && docker build -t balenalib/rpi-raspbian .

Una vez tengamos la imagen base creada, modificamos el Dockerfile de Docker-RPi-Monitor con el siguiente patch:

diff --git a/Dockerfile b/Dockerfile
index 5a1f93d..dbe46ed 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,14 +1,14 @@
-FROM resin/rpi-raspbian:latest
+FROM balenalib/rpi-raspbian:latest
 
 LABEL maintainer="Michael Miklis / <info@michaelmiklis.de>"
 
-RUN [ "cross-build-start" ]
+#RUN [ "cross-build-start" ]
 
 ENV  DEBIAN_FRONTEND noninteractive
 
 # Install RPI-Monitor form Xavier Berger's repository
 RUN apt-get -y update && \
-    apt-get install -y --no-install-recommends dirmngr apt-transport-https ca-certificates  && \
+    apt-get install -y --no-install-recommends dirmngr apt-transport-https ca-certificates procps && \
     apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2C0D3C0F && \
     echo deb http://giteduberger.fr rpimonitor/ > /etc/apt/sources.list.d/rpimonitor.list && \
     apt-get -y update && \
@@ -33,4 +33,4 @@ ADD run.sh /run.sh
 RUN chmod +x /run.sh
 CMD bash -C '/run.sh';'bash'
 
-RUN [ "cross-build-end" ]
+#RUN [ "cross-build-end" ]

Solo queda crear la imagen oficial de rpi-monitor:

cd Docker-RPi-Monitor && docker build -t rpi-monitor .

Ya creada la imagen para nuestra arquitectura arm64, podemos hacer un docker-compose.yml o instanciar la imagen directamente desde la línea de comandos:

docker run --device=/dev/vchiq --device=/dev/vcsm-cma --volume=/opt/vc:/opt/vc --volume=/boot:/boot --volume=/sys:/dockerhost/sys:ro --volume=/etc:/dockerhost/etc:ro --volume=/proc:/dockerhost/proc:ro --volume=/usr/lib:/dockerhost/usr/lib:ro -p=8888:8888 --name="rpi-monitor" -d rpi-monitor:latest

Siendo accesible el contenedor desde http://localhost:8888/

rpi-monitor-screenshot rpi-monitor-screenshot-2 rpi-monitor-screenshot-3

Como curiosidad destacar que el servicio devuelve un documento JSON con los valores de monitorización en la ruta /dynamic.json, dando posibilidad de usarse en varias instancias de RaspberryPi y gestionar las métricas desde otro software o un monitor LCD.