¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Scripting Python en Linux
  3. Recuperar información del sistema
Extrait - Scripting Python en Linux Desarrolle sus herramientas de sistema
Extractos del libro
Scripting Python en Linux Desarrolle sus herramientas de sistema Volver a la página de compra del libro

Recuperar información del sistema

Introducción

El descubrimiento del lenguaje Python ha terminado. En su cerebro ya se han creado muchas conexiones neuronales nuevas. Pero estas todavía no tienen el peso suficiente para producir código Python sin forzar. Es necesario entrar en la fase de aprendizaje y practicar este lenguaje y, en primer lugar, ver y entender cómo lo hacen otros programadores de Python.

Este es el objetivo de la segunda parte de este libro: practicar.

Ahora es posible utilizar Python y algunos de sus módulos para convertirlos en herramientas cotidianas.

Esto es lo que cubriremos en esta segunda parte:

  • Adquirir información sobre el sistema

  • Utilizar formatos de archivo populares

  • Manipular datos

  • Generar informes y sitios estáticos.

  • Simular actividad en una base de datos

psutil: recuperar información del sistema

Las primeras versiones del lenguaje Python se inspiraron en otros lenguajes, como ABC o Modula-3, pero especialmente en el lenguaje C y las herramientas Unix. Por tanto, Python nunca ha estado muy lejos del sistema operativo; además, ofrece todas las posibilidades del lenguaje C y del sistema operativo Unix, al alcance de los scripts.

Pero con el tiempo, Python se ha convertido en un componente esencial de muchas distribuciones de Linux. Se ha adaptado y se puede compilar en muchos sistemas operativos. Esto permitió la realización de librerías multiplataforma como psutil.

psutil (Python System and process UTILities), permite recuperar información sobre el uso del sistema y sobre la gestión de los procesos en ejecución.

Este módulo agrupa la información proporcionada inicialmente por muchos comandos de Unix como: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, tasksetpmap.

Multiplataforma, se puede utilizar en las siguientes plataformas: Linux, Windows, MacOS, FreeBSD, OpenBSD, NetBSD, Sun Solaris y AIX.

Este módulo es fundamental para supervisar, monitorizar o analizar el uso de sus sistemas. Permite recuperar información sobre los procesadores, la memoria, los discos, las interfaces de red, los diversos sensores presentes y especialmente, sobre los procesos en ejecución.

psutil permitió...

Información de los componentes

Un ordenador, finalmente no es algo complejo. Solo hay 4 componentes principales.

Y el módulo psutil le permite examinarlos todos en detalle.

1. Los procesadores

De manera muy simple, psutil permite obtener información sobre procesadores con los siguientes métodos:

cpu_times

Devuelve una tupla nombrada con el tiempo en segundos que pasa la CPU en modo usuario/sistema/inactivo.

El detalle depende del sistema.

percpu=True permite tener el detalle por CPU.

cpu_percent

Devuelve el uso de la CPU como porcentaje.

Interval=1 retrasa el primer uso en segundos.

percpu=True permite tener el detalle por CPU.

cpu_times_percent

Devuelve los porcentajes de uso de la CPU como lo hace el comando sar -u (% user% system…% iowait…% idle).

cpu_count

Devuelve el número de CPU lógicas.

Si el argumento logical=False, devuelve el número de CPU físicas.

cpu_stats

Devuelve información diversa, como el número de cambios de contexto desde el inicio, el número de interrupciones, etc.

cpu_freq

Devuelve la frecuencia de la(s) CPU.

percpu=True permite tener el detalle por CPU.

getloadavg

Devuelve la carga del sistema de los últimos 1, 5 y 15 minutes. 

Aquí hay un pequeño ejemplo para verificar si esto se mantiene con el comando sar -u:

# archivo: psutil/cpu1.py  
  
import psutil  
import datetime  
import time  
  
tiempo = 1  
max_tiempo=5  
  
count=1  
  
while count < max_tiempo:  
   print(datetime.datetime.now().time(),  
                psutil.cpu_times_percent(interval=1))  
   time.sleep(tiempo)  
   count += 1 

Metemos todo esto en un script shell:

python cpu1.py > cpu1.txt &  
sar -u 1 5 >sar.txt & 

Lo lanzamos y a continuación es posible consultar los archivos.

El resultado del comando sar:

Linux 4.4.0-170-generic (W550-BR-007)     04/01/2020     _x86_64_    (4 CPU) 
  
11:51:38        CPU     %user     %nice   %system   %iowait    %steal     %idle 
11:51:39        all      3,99      0,00      0,50...

Sensores y otra información

1. Los sensores

psutil puede proporcionar información sobre los sensores presentes en el servidor; por otro lado, es necesario probar la existencia de cada sensor antes de ejecutar el método.

Entre los métodos disponibles se encuentran:

sensors_battery()

Devuelve información sobre la carga de la batería.

sensors_fans()

Devuelve la velocidad de los ventiladores.

sensors_temperatures()

Devuelve las diferentes temperaturas del hardware, expresadas en grados Celsius, como una tupla.

farenheit = True hace lo mismo en grados Fahrenheit.

A continuación se muestran algunos ejemplos de uso:

>>> psutil.sensors_fans()  
{'thinkpad': [sfan(label='', current=2272)]}  
  
>>> psutil.sensors_battery()  
sbattery(percent=48.698884758364315, secsleft= 
<BatteryTime.POWER_TIME_UNLIMITED: -2>, power_plugged=True)  
  
>>> psutil.sensors_temperatures()  
{'acpitz': [shwtemp(label='', current=49.0, high=103.0,  
critical=103.0)], 'pch_wildcat_point': [shwtemp(label='',  
current=48.0, high=None, critical=None)], 'coretemp':  
[shwtemp(label='Physical id 0', current=49.0, high=105.0,  
critical=105.0), shwtemp(label='Core 0', current=49.0, high=105.0, 
critical=105.0)...

Información de los procesos

Hasta ahora, psutil no parece ser la aplicación asesina (killer app en inglés) absolutamente esencial.

Esto se debe a que todavía queda un apartado por estudiar: los procesos.

Honestamente, es difícil saber si tratar este tema en primer lugar o al final. Pero, en cualquier caso, esta es una sección importante para analizar qué está pasando en los servidores.

1. Clase Objeto y métodos proporcionados por psutil

Principalmente, psutil le proporciona algunos métodos para acceder a los procesos y, lo más importante, una clase Process.

La clase contiene los datos de cada proceso en forma de atributos.

A continuación se muestra la lista de los métodos:

pids

Devuelve la lista de los procesos actuales del sistema.

process_iter

Devuelve un generador sobre los procesos del sistema.

attrs: permite especificar los atributos de la clase de Process que desee.

ad_value: permite especificar un valor predeterminado si el valor no es accesible, como con un problema de permisos ACCESS_DENIED.

pid_exists

Para saber si existe un proceso, este método es más rápido que consultar la función pids().

wait_procs

Le permite esperar al final de una lista de procesos.

procs: lista de procesos a esperar

timeout: tiempo de espera

callback: se llama cada vez que finaliza uno de los procesos

La clase Process.

A continuación se muestran sus atributos (bueno casi, vea las explicaciones a continuación):

Atributos

Descripción

pid

Número de proceso

Nota: este es el único atributo directamente accesible. Para los demás, hay que pasar por las funciones correspondientes.

ppid

Número de proceso principal

name

Nombre del proceso

exe

Ruta absoluta al ejecutable

username

Nombre de usuario

cmdline

Línea de comando bajo la forma de lista de cadenas de caracteres

connections

Lista de las conexiones de red (tupla nombrada).

cpu_affinity

Enumera las CPU en las que se puede ejecutar este proceso.

cpu_num

La CPU en la que se está ejecutando el proceso.

cpu_percent

Porcentaje de uso de CPU para este proceso.

cpu_times

Tupla con nombre que indica los tiempos que han pasado ​​en los diferentes modos (user, system, iowait, children, etc).

create_time

Fecha de creación en formato epoch.

cwd

Directorio de trabajo.

environ

Variables de entorno en forma de diccionario.

gids

Grupos reales, efectivos...

Resumen

Como estamos acostumbrados a decir, el objetivo no es enfrentar los scripts de shell y los scripts de Python, sino más bien utilizar las fortalezas de ambos lenguajes.

psutil es uno de esos módulos que marcan la diferencia entre un lenguaje y otro.

Un poco más adelante se muestra un ejemplo usando el módulo psutil para congelar la información de una base de datos en un momento dado.

Esto le permite analizar el estado de un servidor con la mente despejada.