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.
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…
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!
- 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.
- 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):
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:
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:
Representando gráficamente con Python
Ahora introduciremos de manera interactiva un pequeño programa con los valores de temperatura obtenidos:
>>> 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()
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:
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!
Programador desde 1993 en KS7000.net.ve (desde 2014 soluciones en software libre para farmacias comerciales en Venezuela). Escribe regularmente para Pandora FMS y ofrece consejos en el foro. También colaborador entusiasta en Wikipedia y Wikidata. Machacador de hierros en gimnasios y cuando puede se ejercita en ciclismo también. Fanático de la ciencia ficción. Programmer since 1993 in KS7000.net.ve (since 2014 free software solutions for commercial pharmacies in Venezuela). He writes regularly for Pandora FMS and offers advice in the forum. Also an enthusiastic contributor to Wikipedia and Wikidata. Crusher of irons in gyms and when he can he exercises in cycling as well. Science fiction fan.