225 - Analizando la memoria de tu Raspberry en remoto

PodcastPodcast

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

1:25
-3:15

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

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 en B, 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 salida n 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

Remote Rasbperry configuración

Esta segunda captura de pantalla, muestra los datos de la Rasbperry, que has podido ver en los ejemplos anteriores,

Remote Raspberry uso de memoria RAM

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

Deja una respuesta

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