Lenguaje Python: graficando nuestros datos de monitorización en GNU

Dictador Benevolente De Por Vida. Tranquilos, tranquilas, no venimos a hablaros de política. Ahora que tenemos vuestra atención, os aclaramos que ese (Benevolent Dictator For Life) es el título que tenía Guido van Rossum, creador del lenguaje Python, hasta julio de 2018, cuando decidió renunciar sin dejar sucesor ni tampoco políticas claras al respecto sobre el futuro del lenguaje Python. No obstante este suceso, no creáis que el lenguaje Python ha perdido el rumbo de su desarrollo o que no va a continuar.

logo python

Fuente: Wikipedia

Tampoco os hablaremos de la muy larga historia del lenguaje Python; solo os traemos hoy una amena observación acerca de los usos y posibles usos de dicho “idioma” de programación.

El lenguaje Python y el software de monitorización

En este blog os hemos referido muy brevemente los usos del lenguaje Python en la informática con que trabajamos en este sector:

  • Forma parte de las herramientas básicas que todo administrador de sistemas en GNU/Linux debe tener. ¡Desinstalar el lenguaje Python en GNU/Linux ocasiona severos problemas!
  • PostgreSQL permite guardar directamente programas en lenguaje Python en la base de datos e interpretarlos directamente.
  • Nagios, en sus complementos o “plugins” lo utiliza (aparte de otros lenguajes).
  • PRTG Network Monitor lo ocupa en sus “sensores” (agentes).
  • Para mostrar la temperatura ambiental en una pantalla LCD por medio de un Raspberry Pi.
  • Nuestros lectores lo recomiendan; leed los comentarios (en inglés) de esta entrada comparativa de Pandora FMS, Zenoss y Nagios.

Y lo dejamos solo hasta aquí porque es hora de mostraros un uso práctico del lenguaje Python. Si escribimos solamente Python (pitón) ya sabréis que no estamos hablando de una serpiente…

Fuente: Wikipedia

Instalando Python… o casi

En sistemas GNU/Linux, como afirmamos, Python viene por defecto y utilizaremos la versión disponible para Debian/Ubuntu al momento de escribir estas líneas, la versión 3.6.3 y en nuestro caso. Aunque en varias imágenes que mostraremos dice “Anaconda, Inc”, en realidad usamos Miniconda… y no, ¡no seguimos hablando precisamente de serpientes!

Lenguaje Python y la inteligencia artificial

Lenguaje Python y la inteligencia artificial
  • Anaconda es un entorno de programación que ocupa varios gigabytes de espacio en el disco duro. Es utilizado para trabajos científicos y la llamada “inteligencia artificial”. Es tan vasto que el mismo lenguaje Python es considerado como un componente más: Anaconda contiene a Python y no al contrario.
  • Miniconda, como su nombre lo indica, apenas ocupa unos cientos de megabytes con las librerías básicas y el catálogo de software, y a medida que necesitemos lo instalamos. Este es el que usamos para nuestros estudios perennes en ciencias informáticas.

Anaconda Venezolana

Anaconda venezolana. Fuente: Wikipedia
  • Pip, en cambio, es un gestor de paquetes ligero, con un catálogo muy amplio de utilidades. Al igual que los anteriores deberemos instalarlo en nuestros equipos. Pip forma parte de la “Tienda de Quesos” (Cheese Shop), nombre clave para los diversos “contenedores” de paquetes en Python.
  • Windows Subsystem for Linux, o mejor dicho, “for GNU”, nos permitirá instalar pip en un equipo con Microsoft® Windows 10®, tal como si estuviéramos en un ambiente GNU/Linux; en este enlace web (en inglés) están las instrucciones y además el código en lenguaje Python para ejecutar Tetris®.
  • Es necesario decir que Python lo podremos instalar en Microsoft® Windows 7 SP1® o superior, pero no contaremos con las utilidades GNU sino que deberemos contar con Powershell y WMI. Y esas, esas son otras historias.

Instalando pip y matplotlib

Dicho esto, procedemos a instalar pip en la siguiente figura: la primera instrucción lo instala (en nuestro caso ya estaba instalado) y en la segunda instrucción solicitamos actualizar (y ya veis que nos coloca la última versión, la 10):

sudo apt install python-pip python-dev sudo pip install --upgrade pip

sudo apt install python-pip python-dev sudo pip install –upgrade pip

Luego ejecutamos el intérprete de Python donde colocaremos, línea por línea, lo siguiente:


>>> import matplotlib.pyplot as plot
>>> xs = [ 2, 4, 6 ]
>>> ys = [ 1, 3, 5 ]
>>> plot.plot(xs, ys)
>>> plot.show()

Veréis algo parecido a esto en vuestra terminal:

Graficando con lenguaje Python

Graficando con lenguaje Python

Y se os abrirá en una ventana aparte un bonito gráfico con el que podremos interactuar. Podremos cambiarle la leyenda, por ejemplo:

¿Qué hemos hecho?

  • En la primera línea le diremos a Python que cargue (“import”) en memoria las librerías necesarias para graficar .
  • En la segunda y tercera línea introducimos valores arbitrarios en dos sendas matrices de una sola fila.
  • En la cuarta línea graficamos en memoria.
  • En la última línea pedimos mostrar por pantalla.

Monitorizando temperatura en los discos duros

Ahora hagamos algo práctico, instalemos el programa hddtemp y cada cinco minutos tomemos la medida de dos discos duros, “a” que contiene el sistema operativo y “b” que contiene los datos del usuario:

sudo apt-get install hddtemp

sudo apt-get hddtemp /dev/sda

Representando gráficamente con Python

Ahora introduciremos de manera interactiva un pequeño programa con los valores de temperatura obtenidos:

udo apt-get hddtemp /dev/sda

sudo apt-get hddtemp /dev/sda


>>> import matplotlib.pyplot as plot
>>> tiempo = [ 0, 5, 10 ]
>>> disco1 = [38, 38, 38 ]
>>> disco2 = [41, 41, 40 ]
>>> plot.xlabel('Tiempo')
>>> plot.ylabel('Temperatura')
>>> plot.title(r'Temperatura en discos')
>>> plot.plot(tiempo, disco1, label=r'Disco 1', color='blue')
>>> plot.plot(tiempo, disco2, label=r'Disco 2', color='green')
>>> plot.legend(loc='upper right')
>>> plot.show()

Gráfica con temperatura en discos

Gráfica con temperatura en discos

Por supuesto, el paso siguiente sería crear un programa con lenguaje Python que ejecute hddtemp cada cierto tiempo, vaya almacenando en dos matrices, luego cargue los datos para el gráfico y en vez de mostrar por pantalla guarde en disco imágenes numeradas sucesivamente cada hora; para ello, en vez de usar plot.show() usaríamos plot.savefig(‘fichero-ene.png’) ¿Queréis ir un paso más allá?

Módulos de Pandora FMS que utilizan el lenguaje Python

Esto ya es más avanzado: utilizar el lenguaje Python para que haga un trabajo completo y entregue sus resultados a un agente de Pandora FMS; por eso lo hemos dejado para finalizar.

Hemos escogido uno de los hilos creados en el foro de preguntas y respuestas de Pandora FMS, donde utilizan un programa hecho en Python para entregar datos a un complemento, midiendo la velocidad de acceso que tengamos a Internet.

Primero deberemos instalar el programa con “sudo apt-get install speedtest-cli”. Luego descargaremos el código del foro que mencionamos y lo guardaremos con el nombre “speedtest.py”. En un primer intento ejecutaremos simplemente lo siguiente, “python3 speedtest-cli”, en la carpeta donde descargamos el guion:

python3 speedtest-cli

python3 speedtest-cli

Observamos su resultado y ahora vamos a echar mano de la entrada estándar y salida estándar (STDIN, STDOUT), contemplado en el POSIX y que permite pasar valores entre diferentes programas. El artificio que usaremos obtiene la salida anterior y lo “procesa”con estos comandos (una sola línea):

| awk '/Download:|Upload:/ {print "\n"$1" Speed\ngeneric_data\n"$(NF-1)"\n"$NF"\n\n"}'

Esto último que vemos es el formato que espera recibir Pandora FMS para convertirlo en información y guardarlo en la base de datos. Cualquier duda, inquietud o comentario, ¡por favor contáctanos!

Presente y futuro de Python

Desde el año 2010, Python progresivamente ha ido aumentado el porcentaje de consultas en los buscadores web, alcanzando un puntaje de 60 en 2018. ¡Un 40% de los profesionales lo usamos y de entre quienes no lo usan un 25% dice que desea hacerlo a futuro! Para despedir: en el último año en América el número de búsquedas sobre Python ha superado a las realizadas sobre Kim Kardashian, una popular estrella de televisión en este continente. ¿Qué os parece?

¡Hasta una próxima oportunidad!

Shares