225 - Analizando la memoria de tu Raspberry en remoto
Remote Raspberry es un herramienta que permite analizar la Raspberry en remoto. Tanto el consumo de memoria RAM como Swap y otros parámetros
Uno de los temas recurrentes del podcast es el de monitorizar o analizar diferentes aspectos de tu Raspberry o de un servidor, ya sea de forma local o en remoto. En este sentido. Por supuesto, algo que siempre me preocupa es el consumo de recursos, tanto de mi equipo de escritorio como de mi Raspberry o de los diferentes VPS que estoy utilizando actualmente. Sin embargo, ninguno de estos aspectos es lo que me ha llevado a implementar la nueva aplicación en la que estoy trabajando y que es la undécima entrega de la saga de 12 meses 12 aplicaciones Open Source.
La cuestión, es que en ocasión, me vas a acompañar en el nacimiento y desarrollo de la aplicación, siempre que tu lo consideres así, por supuesto. Así, en este nuevo episodio del podcast, quiero contarte de que va esta aplicación, sus orígenes, y las bases del mismo, para, que en futuros episodios, me acompañes en su desarrollo, hasta que alcance la mayoría de edad y su madurez completa.
Analizando la memoria de tu Raspberry en remoto
Sobre los orígenes de la aplicación
El origen de la aplicación surge en el episodio del podcast número 92 sobre como crear un timelapse con la Raspberry Pi. A raíz de este podcast, me mandó un correo Luciano, en el que me comentaba la posibilidad de hacer algo similar a lo que propuse en el podcast, pero algo mas complejo.
Según lo que el propio Luciano me comentó, su objetivo erar armar una Raspberry Pi, con una cámara cualquiera, que por supuesto fuera compatible, y crear un sistema de timelapse que fuera lo mas sencillo y sólido posible. Así, los requisitos marcados eran los siguientes,
- Autosuficiente (mediante un panel solar)
- Tiene que poder reiniciarse sola y siga tomando fotos si se cuelga el sistema, hay un corte de energía o lo que fuere.
- Debe tomar fotografías cada cierto tiempo, pudiendo configurar el tamaño, la calidad, y otros aspectos relacionados con la imagen.
- Tiene que ser programable, pudiendo definir un horario en el que realice la toma de fotografías.
- Además de guardar la fotografía en la tarjeta micro SD, tiene que existir la posibilidad de que la envíe a alguna nube.
Desde el mes de agosto, he estado dando vueltas a como enfocar la aplicación. La cuestión, es que tiene que ser suficientemente sencilla para que la pueda manejar cualquiera, con independencia de sus conocimientos.
Los planteamientos iniciales
A partir de aquí, se me ocurrió crear un sencillo menú o mediante diálogos, aprovechando el tutorial de diálogos para scripts, que permitiera configurar el servicio.
Por supuesto, que esto debería funcionar como un servicio, dado los planteamientos marcados por Luciano. Para hacer esto del servicio, que mejor que el tutorial de Systemd.
Sin embargo, esto son las bases, sin embargo, no estará al alcance de todos, porque requiere lidiar con el terminal, y no todos, estamos dispuesto a ello.
Esto me dio pie a pensar en que la aplicación de configuración debía estar en tu ordenador de escritorio o en tu portátil, y no en la Raspberry. Esto simplificaría mucho el trabajo.
Y así, es como surgió la aplicación Remote Raspberry. Una aplicación que te permita relacionarte con tu Raspberry de forma mas amigable, con una interfaz gráfica.
¿Y que tiene que ver esto con analizar la memoria de tu Raspberry en remoto? Pues todo y nada. Como de costumbre, una vez metidos en harina, pensé que además de preparar tu Raspberry para realizar un timelapse, también te podía ayudar a hacer otras operaciones, mas o menos rutinarias. Y una de estas operaciones rutinarias, es precisamente, analizar la memoria de tu Raspberry en remoto.
Un paseo por los entresijos de tu sistema operativo
Durante estos días, mientras comenzaba con el desarrollo de la aplicación, he pensado, en que esta implementación me va a servir para aunar dos aspectos que realmente me parecen muy interesantes y que ya he comentado en mas de una ocasión. Se trata de analizar los entresijos de tu sistema operativo y mostrarlos en una aplicación con su interfaz gráfico. Que puede ser la que hoy te estoy mostrando yo o bien, la que tu mismo hagas.
Así, en el episodio 224 del podcast, te hablé sobre como podías vigilar el estado de la batería del portátil.
En este episodio te hablé sobre una nueva extensión para GNOME Shell, que he implementado, pero también, sobre como puedes analizar tu mismo, y con diferentes herramientas y opciones, la situación de la batería de tu portátil.
Esto mismo, lo voy a aunar, en este episodio del podcast, en el análisis de la memoria de tu Raspberry en remoto, mostrando diferentes formas de realizar este análisis, y como se muestra en la aplicación.
Pero, no solo esto, sino que además, durante las próximas semanas, podrás hacer lo mismo pero con otras partes, como puede ser CPU, disco, etc.
Conexión remota
Aunque he barajado diferentes opciones para comunicarme con la Raspberry, empezando por montar un servidor, al final, me he quedado con lo mas sencillo. Un módulo de Python que también estoy utilizando en el trabajo, y que le estoy sacando mucho beneficio.
Este módulo de Python es Paramiko. Este módulo es una implementación del protocolo SSH, y permite una funcionalidad tanto de cliente como de servidor. En el caso de Remote Raspberry, solo está implementado, por lo menos hasta el momento, en su versión de cliente.
Como analizar la memoria de tu Raspberry en remoto
Como te he ido contando, el objetivo es que veas distintas opciones para analizar la memoria de tu Raspberry, en principio de forma local, aunque también te muestro como lo puedes hacer en remoto, y posteriormente, te contaré como puedes hacerlo con Remote Raspberry.
free
La primera de las herramientas para conocer el uso de la memoria de tu Raspberry es free
. Esta herramienta te muestra la cantidad de memoria libre y utilizada por tu sistema. Tiene algunas opciones que son interesantes, sobre todo a la hora de entender los resultados,
-b|k|m|g
muestra los resultados de memoria enB
,KiB
,MiB
óGiB
respectimante-h
los valores los muestra para que sean mas fáciles de leer-s
actualiza los valores cada dos segundos.-l
muestra estadísticas de los resultados-c
repite la salidan
veces y luego termina
En el caso de mi equipo, el resultado es el siguiente,
$ free --mega h
total usado libre compartido búfer/caché disponible
Memoria: 7,9G 3,4G 430M 1,3G 4,1G 2,9G
Bajo: 7,9G 7,4G 430M
Alto: 0B 0B 0B
Swap: 4,1G 405M 3,7G
Si lo que quieres es analizar la memoria de tu Raspberry en remoto, entonces, la ejecución será la siguiente,
$ ssh pi@raspberrypi.local "free --mega -h -l"
total used free shared buff/cache available
Mem: 378M 26M 150M 14M 200M 284M
Low: 378M 227M 150M
High: 0B 0B 0B
Swap: 102M 0B 102M
Si te estás preguntando, porque estos valores tan bajos, la razón es que para este proyecto estoy utilizando una Raspberry Pi Zero, que sobra y se basta para hacer todo esto.
/proc/meminfo
En particular esta es la opción que estoy utilizando para el caso de la aplicación Remote Raspberry. Simplemente se trata de leer directamente la información que se encuentra en ese archivo. Tan sencillo como ejecutar el comando,
cat /proc/meminfo
De nuevo, si lo quieres es revisar la memoria de tu Raspberry en remoto, tendrás que ejecutar esta instrucción en lugar de la anterior,
ssh pi@raspberrypi.local "cat /proc/meminfo"
Así, por ejemplo, parte de la información que me devuelve la Raspberry es la siguiente,
MemTotal: 378176 kB
MemFree: 150836 kB
MemAvailable: 284536 kB
Buffers: 26048 kB
Cached: 160048 kB
SwapCached: 0 kB
Active: 141348 kB
Inactive: 54412 kB
vmstat
vmstat
es una herramienta que muestra diferente fonformación sobre los procesos, memoria, y mucho mas. Si por ejemplo ejecutas vmstat 2 5
te muestra la información cada 2 segundos y en 5 ocasiones. De nuevo, ejecutando en remoto, esto sería,
$ ssh pi@raspberrypi.local "vmstat 2 5"
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 150620 26092 174396 0 0 1 0 13 28 0 0 100 0 0
0 0 0 150620 26092 174396 0 0 0 0 16 32 0 0 100 0 0
1 0 0 150620 26092 174396 0 0 0 0 15 29 0 0 100 0 0
0 0 0 150620 26100 174396 0 0 0 8 19 43 0 1 88 12 0
0 0 0 150620 26100 174396 0 0 0 0 15 27 0 0 100 0 0
Si lo que quieres es información sobre la memoria, en este caso tienes que utilizar la opción -s
top
top
es una herramienta ampliamente utilizada para comprobar el uso, tanto de memoria como de CPU por los diferentes procesos que están corriendo en la Raspberry.
htop
Una versión mas potente de la anterior es htop
. Sobre esta herramienta escribí un artículo que puedes consultar si quieres profundizar sobre la misma, titulado, monitorizar nuestro sistema con htop.
Remote Raspberry
Respecto a esta herramienta, indicarte que actualmente solo está disponible la parte de análisis de la memoria RAM en remoto. Estoy trabajando en incorporar las otras piezas que he comentado, pero esto será poco a poco, conforme lo vaya publicando en el podcast, para que también puedas realizar el análisis conforme lo cuento aquí mismo.
Esta aplicación está disponible para las versiones de Ubuntu Focal, Groovy y Hirsute, y tiene un aspecto, al menos en modo oscuro, como te muestro en las siguientes capturas de pantalla.
Esta primera captura de pantalla se corresponde con la configuración de la conexión
Esta segunda captura de pantalla, muestra los datos de la Rasbperry, que has podido ver en los ejemplos anteriores,
Puedes instalarlo, ejecutando las siguientes instrucciones en un terminal,
sudo add-apt-repository ppa:atareao/atareao
sudo apt update
sudo apt install remote-raspberry
Conclusión
Como te he ido indicando a lo largo del podcast, esta forma de unir los entresijos de tu sistema operativo preferido, con la implementación de una aplicación, me parece realmente interesante. Espero sinceramente, que para ti también lo sea.
Más información,
Imagen de portada de William Bayreuther en Unsplash