Funcionalidades Tecnología

Aprende a monitorizar Raspberry Pi con RPi-Monitor en Perl

julio 5, 2018

Aprende a monitorizar Raspberry Pi con RPi-Monitor en Perl

This post is also available in : Inglés

Monitorizar Raspberry Pi con RPi-Monitor en Perl

Para muchos informáticos las 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. A alguno quizá le recuerde a la descripción de Pandora FMS; por estos motivos ambos son complementarios. En este 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) y en esta oportunidad aprenderemos a Monitorizar Raspberry Pi con RPi-Monitor. ¡Pero nos quedamos cortos porque en realidad los Raspberry Pi tienen otros cientos de usos! Veamos.

monitor RPi que muestra temperatura y humedad

Raspberry Pi: Historia e introducción

En Wikipedia podremos conocer en profundidad todos los detalles acerca de los Raspberry Pi. Nosotros destacamos lo siguiente:

  • Aunque su hardware es privativo y está hecho en China, su sistema operativo y aplicaciones son totalmente de 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 (CPU) es su Arquitectura de Ordenador con Conjunto Reducido de Instrucciones (RISC), llamado ARM (acrónimo de Advanced RISC Machine), 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 fabricadas por terceros, podemos encontrar carcasas Raspberry Pi de todo tipo. 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.

RaspberryPi con estructura de legos

RPi-Monitor

RPi-Monitor es software libre escrito en lenguaje Perl por el francés Xavier Berger. 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 (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 solo necesita el lenguaje Perl y nada más. Guarda los datos en un formato denominado Roun-Robin-Database el cual simplemente es uno o varios ficheros que se reformatean y se subdividen en períodos de tiempo y campos a guardar con un mismo tamaño fijo. El detalle 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.

Esquema circular

Así con este esquema podremos escer 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 a los paquetes enviados y recibidos por una o más interfaces de red instaladas en un Raspberry Pi, así como al 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 acerca 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 podremos dar un acceso seguro a nuestro Raspberry Pi en producción con ayuda de SSL, htpasswd y shellinabox y la generación de los certificados requeridos. 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. Hay que recalcar que todos los datos son de modo lectura, no en tiempo real (deberemos refrescar la página web cuando queramos 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.conf y 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.conf quitando el símbolo numérico al principio de ella.

Para monitorizar las unidades USB vamos al archivo /etc/rpimonitor/storage.conf y 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 usados y con solo descomentar #include=/etc/rpimonitor/template/services.conf podremos 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, especificamos el puerto de cada aplicación.
Para finalizar la configuración reiniciamos el RPi-Monitor con sudo systemctl restart rpimonitor. Luego para conocer su estado, en vez de “restart” pondremos “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. 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 hayamos 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
conexión = 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 nuestra Raspberry Pi.

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ían afectar, entre otros, 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 ambiental.

Para ello necesitaremos experiencia en electrónica, ya que se requieren componentes adicionales como una resistencia, cableado y una placa para albergar los componentes. Por eso esta parte es para repasar conceptos: descargamos los controladores para dichos componentes desde Adafruit y agregaremos lo siguiente en la configuración del RPi-Monitor (sustituir “.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 aquí 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.


    Written by:



    Leave a comment

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.