Para Pandora FMS los Raspberry Pi son aparatitos muy bien conocidos en cuanto a programación se refiere. Son económicos, consumen poca energía y son muy flexibles, tal como lo es Pandora FMS; ambos se llevan muy bien. En este vuestro blog hemos utilizado estos ingenios para crear un tablero interactivo en un televisor, para monitorizar el ancho de banda en el hogar y en las empresas (en este último artículo descrito en gran detalle sobre como instalarlo), en esta oportunidad monitorizaremos al Raspberry mismo por medio de RPi-Monitor ¡pero nos quedamos cortos porque en realidad los Raspberry Pi tienen otros cientos de usos! Veamos.

Raspberry Pi : historia e introducción.
En Wikipedia podremos conocer a profundidad todos los detalles acerca de los Raspberry Pi y aquí resumiremos lo siguiente:
- Aunque su hardware es privativo y hecho en China, su sistema operativo y aplicaciones son totalmente Software Libre.
- Tiene muchos sistemas operativos, uno muy conocido y derivado de Debian es el Raspbian. También existen Pidora (basado en Fedora), SUSE y Arch Linux, basado en ARM (ver siguiente punto).
- Su Unidad Central de Procesamiento (en inglés Central Process Unit o CPU) es Arquitectura de Ordenador con Conjunto Reducido de Instrucciones (en inglés Reduced Instruction Set Computer o RISC) llamado ARM (acrónimo de Advanced RISC Machine -sí, es en serio lo de los trabalenguas aunado a los acrónimos recursivos-), de 32 bits y ahora de 64 bits en el modelo Raspberry Pi 3. Esta arquitectura permite el ahorro de transistores por lo que redunda en un pequeño tamaño de procesador y ahorro consecuente de energía.
- Una particularidad de los Raspberry Pi es que carecen de reloj en tiempo real (en inglés, real-time clock, RTC) por lo que dependen de comunicarse con el exterior por medio del Network Time Protocol (NTP) a fin de tomar la fecha y hora de sus operaciones, cosa muy importante a la hora de monitorizar. Siempre arrancan con la fecha de 30 de noviembre de 1999 y si estamos en un ambiente «hostil», donde no puedan conectarse a ninguna red de área local, podremos adquirir un RTC como este. Volvemos a repetir: si no tenemos la fecha y hora exacta la liaremos gorda a la hora de monitorizar.
- Si ya de por sí es sorprendente el tamaño y eficiencia, existe también el modelo Raspberry Zero, aún más pequeño, más económico pero por supuesto con diferentes conectores: en el caso del vídeo viene con miniHDMI en vez de HDMI, por ejemplo (ningún Raspberry Pi trae el antiguo conector analógico VGA).
- Carecen de fuente de energía propia, pero eso no quiere decir que no se recalienten (ya que todo convertidor de corriente alterna a corriente directa emana calor por rayos infrarrojos) y ese es uno de los puntos que vamos a monitorizar y tratar en este trabajo. Los Raspberry Pi obtienen su poder de un conector microUSB de 5 voltios o por Conectores de Entrada y Salida de Propósito General (en inglés General Purpose Input/Output o GPIO); éstos últimos conectores servirán también para conectar un RTC a fin de que mantengan hora y fecha al ser apagados, de ser necesario.
- Según el modelo tiene diferentes dispositivos de entrada y salida: conector Ethernet, red inalámbrica, puerto USB, Bluetooth, salida de audio, salida de vídeo, etc.
- La memoria RAM se comparte con la memoria de vídeo, puede traer 512 o 1024 megabytes pero no pueden ser ampliados.
- El almacenamiento es externo por medio de tarjeta USB o tarjeta SD, es recomendable 8 gigabytes como mínimo ya que podremos destinar 5 gigabytes para la imagen de cualquier sistema operativo y 3 gigabytes para aplicaciones y datos. Ya integrado en firmware el Raspberry Pi iniciará por primera vez con un mini sistema operativo que nos permitirá instalar el sistema operativo deseado.
- Los Raspberry Pi vienen desnudos, por así decirlo, no solo por economía sino por flexibilidad: cada usuario dará un uso diferente y conectará los accesorios que necesite. Generalmente, fabricado por terceros, ofrecen carcasas para uno o más Raspberry Pi. En sitios de ventas en línea venden juegos de carcasas, cables, tarjetas de memoria, sensores, y paremos de contar, ya sea de forma combinada o incluso cada componente por separado. Cada juego de accesorios está orientado a un uso específico: industria, aprendizaje, usos científicos, etcétera.

RPi-Monitor.
RPi-Monitor es software libre escrito en lenguaje Perl por el francés Xavier Berger desde el año 2013. Surgió de la necesidad de vigilar estos útiles aparatos, que fueron pensados en un principio para la enseñanza de la computación pero sin embargo las empresas e industrias notaron su gran capacidad de adaptación en el campo de la producción y manufactura, así como el comercio. Tener un ojo puesto en estos dispositivos económicos, aunque fáciles de sustituir por su costo, es una muy buena idea a fin de estar siempre en línea y no tener contratiempos con nuestro trabajo al predecir un mal funcionamiento o desconfiguración.
Desde la versión 2.6 (año 2014) está disponible en la tienda de software llamada «The Pi Store», un servicio oficial que permite instalar y mantener actualizado gran cantidad de software para los Raspberry Pi. Necesitaremos tener instalado (en realidad por defecto ya viene instalado) el software «pistore» pero dado el caso o la duda siempre podremos ejecutar en la terminal de comando sudo apt-get update && sudo apt-get install pistore .
Instalación de RPi-Monitor en un Raspberry Pi.
Partiremos de un Raspberry Pi configurado como describimos anteriormente en este vuestro blog (podremos conectarnos al Raspberry Pi vía SSH, interfaz web o incluso por Escritorio Remoto con eHorus descargando los paquetes oficiales para Raspbian, a solicitud). Para instalar este software bien podemos descargarlo directamente desde su página de control de versiones en GitHub, agregar un repositorio adicional al Raspbian del Raspberry Pi o desde su tienda oficial que comentamos. En todo caso debemos primero instalar las siguientes librerías (dependencias) para la versión 2.8:
- librrds-perl
- libhttp-daemon-perl
- libjson-perl
- libipc-sharelite-perl
- libfile-which-perl
- aptitude
Funcionamiento básico.
RPi-Monitor por sí solo necesita, como dijimos, del lenguaje Perl y más nada. Guarda los datos en un formato denominado Roun-Robin-Database el cual simplemente es uno o varios ficheros que se preformatean y se subdividen en períodos de tiempo y campos a guardar y que siempre será de un tamaño fijo. El detalle del asunto está en utilizar un cursor que apunta al último registro activo para así grabar el siguiente y al llegar al final del archivo se comenzará a sobrescribir en el primer registro.

Así con este esquema podremos establecer el tiempo a monitorizar (por ejemplo, los datos de la última semana o mes) con la tranquilidad de saber que nunca desbordaremos la capacidad de almacenamiento debido a la estrategia circular de escritura, tal como su nombre en inglés lo indica. Dada la sencillez electrónica de los Raspberry Pi no hace falta guardar mayor configuración, no obstante, si somos exigentes y como está escrito en software libre, podremos crear un agente en lenguaje Perl para respaldar datos en una base de datos remota (como MySQL, por ejemplo) simplemente leyendo todos los registros y comparando por fecha cada registro.
Aspectos a monitorizar.
RPi-Monitor es capaz de dar seguimiento los paquetes enviados y recibidos por una o más interfaces de red instaladas en un Raspberry Pi así como uso y estado de los dispositivos de almacenamiento (tarjetas SD o USB), memoria de intercambio, memoria RAM, tiempo de funcionamiento e incluso la temperatura de la CPU. En el caso del sistema operativo nos informa acrca de su versión y si hay actualizaciones por instalar, esto último muy importante porque corrige vulnerabilidades para proteger nuestros aparatos de potenciales ataques de personas u entes malintencionados.
Interfaz web.
La interfaz para el usuario está totalmente separada del software de monitorización y requiere de un servidor web Ngix al cual con un paciente trabajo podremos, con ayuda de SSL, htpasswd y shellinabox y la generación de los certificados necesarios, un acceso seguro a nuestro Raspberry Pi en producción. Este esquema de trabajo sería necesario si tenemos expuesto nuestro aparatito al internet ya que no es necesaria credencial alguna para visualizar los datos recabados. Es de recalcar que todos estos datos son de solo lectura, no es en tiempo real (deberemos refrescar la página web cuando querramos ver datos actualizados), no tiene datos vinculantes más allá de la dirección IP y es de suponer e imaginar que no ofrecen mayor atractivo para atacante alguno; sin embargo la privacidad nuestra y/o de nuestros clientes/usuarios siempre es buena llevarlo al extremo en todo caso y momento.
Configuración de RPi-Monitor en un Raspberry Pi.
Rápidamente repasaremos los principales valores a cambiar según nuestras necesidades, para todos los detalles deberemos consultar tanto su repositorio en GitHub como su blog dedicado a tal efecto.
- Cambiar puerto de escucha: modificar el fichero
/etc/rpimonitor/daemon.confy cambiar el valor predeterminado que es 8888 por el valor que necesitemos. - Para monitorizar la tarjeta de red inalámbrica (Wifi), igual que el punto anterior debemos modificar el mismo fichero y descomentar la siguiente línea
#include=/etc/rpimonitor/template/wlan.confquitando el símbolo numeral al principio de ella. - Para monitorizar las unidades USB vamos al archivo
/etc/rpimonitor/storage.confy de igual manera descomentamos#include=/etc/rpimonitor/template/storage.conf(se requiere configuración adicional dependiendo de la cantidad de volúmenes conectados). - Para otros servicios el Raspberry Pi cuenta con la sagaz programación del RPi-Monitor: tiene una tabla de los puertos más comunmente usados y con solo descomentar
#include=/etc/rpimonitor/template/services.confpodremos incluir programas tales como PostgreSQL o MySQL. - Por último podremos personalizar la forma y orden de los datos monitorizados, así, si queremos que primero nos muestre el estado de MySQL y luego de PostgreSQL agregaremos las siguientes líneas:
dynamic.1.name=mysql dynamic.2.source=netstat -nlt dynamic.2.regexp=tcp\d? .*:(3306).*LISTEN dynamic.2.name=postgresql dynamic.2.source=netstat -nlt dynamic.2.regexp=tcp\d? .*:(5432).*LISTEN
Como vemos solo tenemos que llevar la numeración consecutiva de cada servicio a monitorizar y para estar seguros incluso especificamos el puerto de cada aplicación (o los cambiamos de ser necesario).
Para finalizar la configuración reiniciamos el RPi-Monitor con sudo systemctl restart rpimonitor. Luego para conocer su estado en vez de «restart» ponemos «status», para detener el servicio «stop» y para iniciarlo «start», todo nemotécnico por sus significados naturales en el idioma inglés.
¿Una pantalla LCD en Raspberry Pi?
La monitorización de los Raspberry Pi puede ir más allá de la supervisión remota e incluso puede ofrecer datos de manera local y directa en sitio. Si adquirimos una pantalla LCD modelo PCD8544 (muy popular en teléfonos móviles), la conectamos a unos de sus GPIO y con un poco de lenguaje Python podremos mostrar en pantalla la temperatura actual del Raspberry Pi. Debemos tener cuidado de sustituir «localhost» por la dirección IP real (o incluso la dirección web) y el puerto 8888 al puerto que hallamos configurado:
#!/usr/bin/env python
import httplib, time, os, sys, json
import pcd8544.lcd as lcd
# Iniciar la conexión con el servidor web integrado de RPi-Monitor
# recordar cambiar "localhost" y 8888 a los valores adecuados
conexion = httplib.HTTPConnection("localhost", 8888)
# Solicitar el fichero dynamic.json (formato de datos json)
conexion.request("GET","/dynamic.json")
# Respuesta del servidor
respuesta = conexion.getresponse()
# A una respuesta correcta obtener los datos en sí mismos
if ( respuesta.status == 200 ):
datos = respuesta.read()
# Abrir una función que analice los datos, comunique
# y encienda la pantalla para mostrar luego los datos
pantalla = json.loads( datos )
lcd.init()
lcd.backlight(1)
# Por ejemplo, obtener temperatura:
rpi_temperatura = pantalla['temperature']
# Cerrar la conexión con el servidor web integrado del RPi-Monitor
conexion.close()
# y apagar pantalla lcd
lcd.backlight(0)
Uso de Raspberry Pi con Pandora FMS.
Pandora FMS se distingue por su flexibilidad y podremos crear un complemento o plugin para importar los datos de nuestro Raspberry Pi al cual nos toca monitorizar en sí mismo. Un guion en lenguaje Python podría ser el anterior utilizado para mostrar por pantalla LCD los datos de monitorización pero redirigiendo los datos hacia el complemento o plugin creado para tal efecto; en esta entrada podremos obtener mayores detalles sobre la creación de plugins en Pandora FMS.
Periféricos en Raspberry Pi: humedad y temperatura ambiental.
Son dos variables que podría afectar, por ejemplo, a nuestro cuarto de servidores. Aunque esto no forma parte de la monitorización en sí misma del Raspberry Pi, puede ser integrada al RPi-Monitor si adquirimos una DHT11 para medir la temperatura ambiental y una DHT22 para la humedad la humedad ambiental.
Para ello necesitaremos experiencia en electrónica, ya que se requieren, además componentes adicionales tales como una resistencia, cableado y una placa para albergar los componentes. Por ello esta parte es más bien de concepto: descargaremos los controladores para dichos componentes desde Adafruit y agregaremos lo siguiente en la configuración del RPi-Monitor (susitutir «.ene.» por el valor numérico siguiente en el fichero de configuración):
dynamic.ene.name=humidity dynamic.ene.source=Adafruit_DHT 11 27 dynamic.ene.regexp=Hum = (\S+) dynamic.ene.postprocess= dynamic.ene.rrd=GAUGE
También necesitaremos agregar para que también lo muestre en el servidor web integrado:
web.statistics.1.content.ene.name=humidity web.statistics.1.content.ene.ds_graph_options.humidity.label=Humidity (%) web.statistics.1.content.ene.ds_graph_options.humidity.yaxis=2 web.statistics.1.content.ene.graph_options.y2axis={ position: "right", min: 0, max: 100 }
Conclusiones.
Debido a la amplia variedad de hardware que puede ser conectado al Raspberry Pi y como trabaja con software libre las combinaciones son ilimitadas para cada gusto y/o necesidad no obstante acá hemos «monitorizado al que monitoriza» y lo hemos adaptado al conjunto de estadísticas que debemos vigilar en una red de área local para el facilitarnos nuestro trabajo diario ¡Buen provecho al comeros esta frutilla!*
*»Berry» en inglés significa «baya» y «raspberry» significa «frambuesa», de allí el juego de palabras 😉
Fuentes consultadas:
En idioma castellano:
- «Servidor funcional basado en Raspberry PI con panel de gestión centralizada» por Antonio Mónaco Osado.
En idioma inglés:
- «Raspberry Pi Real Time Clock».
- «Howto Raspberry Pi – Use your Pi as a secure Reverse Proxy gateway to your Web internal Sites and Services».
- «RPi-Monitor: Security and authentication with a reverse proxy».
- «A LCD display my RPi and RPi-Monitor».
- «Round Robin Database with MySQL».
- «Add WiFi to Raspberry Pi and monitor it with RPi-Monitor»
- «RPi-Monitor: Use labels to show servers status»
- «RPi-Monitor Installation»
- «RPi-Monitor FAQ»
- «RPi-Monitor: Use a DHT11 or DHT22 humidity and temperature sensor»
- «Wiring up DHT humidity sensors»