Con una sola biblioteca, puede monitorear una gran cantidad de métricas del sistema y asegurarse de que todo funcione sin problemas.

La mayoría de las organizaciones dependen en gran medida de su infraestructura de TI para ejecutar sus operaciones. Los fallos no planificados del sistema o la degradación del rendimiento pueden provocar interrupciones, pérdidas financieras y daños a la reputación.

Los controles automatizados del estado del sistema son cruciales para garantizar que la infraestructura de TI permanezca estable y confiable. Al monitorear métricas críticas y detectar anomalías rápidamente, puede minimizar el tiempo de inactividad.

Definición de controles de estado

Es esencial definir qué controles de salud desea realizar en su sistema. Debe establecer criterios claros sobre lo que monitoreará y por qué. Comience por identificar los objetivos principales de su sistema. ¿Qué funciones o servicios proporciona?

Luego, establezca puntos de referencia de rendimiento basados ​​en datos históricos y asegúrese de que sus controles de estado evalúen el uso eficiente de los recursos del sistema. Finalmente, defina los umbrales que indican un problema. ¿Qué porcentaje de uso de recursos considera alto o bajo? ¿En qué momento el sistema debería activar una alerta?

Elegir bibliotecas y configurar su entorno

Para automatizar el proceso de monitoreo del sistema en Python, necesitará las siguientes bibliotecas para ayudarlo a recopilar métricas del sistema y luego programar las verificaciones.

  • psutil: Esta es una biblioteca multiplataforma que proporciona una interfaz para recuperar información sobre la utilización del sistema (CPU, memoria, discos, red, sensores).
  • cronograma: esta biblioteca proporciona una forma sencilla de programar tareas para que se ejecuten en intervalos específicos.
  • tiempo: una biblioteca integrada de Python que utilizará para operaciones relacionadas con el tiempo.
  • Inicio sesión: Otra biblioteca integrada que utilizará para crear registros de las comprobaciones de estado del sistema.

Comience a configurar las cosas por creando un nuevo entorno virtual Python. Esto evitará posibles conflictos con la biblioteca de versiones. Luego ejecute el siguiente comando de terminal para instalar las bibliotecas requeridas con Pip:

pip install psutil schedule

Una vez que las bibliotecas estén instaladas en su sistema, su entorno estará listo.

El código fuente completo está disponible en un repositorio de GitHub.

Importar las bibliotecas necesarias

Crea un nuevo guión, monitoreo.pyy comience importando las bibliotecas requeridas:

import psutil
import schedule
import time
import logging

Importar las bibliotecas le permitirá utilizar la funcionalidad que ofrecen en su código.

Registro e informes

Necesita una forma de registrar los resultados de sus controles de salud. El registro sirve como una herramienta vital para capturar y preservar un registro histórico de eventos y problemas de depuración en su código. También juega un papel fundamental en el análisis del desempeño.

Utilice la biblioteca de registros incorporada para crear sus registros para este proyecto. Puede guardar los mensajes de registro en un archivo llamado sistema_monitor.log.

# Function to log messages
deflog_message(message):
# Configure logging
logging.basicConfig(filename='system_monitor.log', level=logging.INFO,
format='%(asctime)s - %(message)s')
logging.info(message)

Para generar informes, imprima un mensaje de alerta en la consola para que sirva como notificación inmediata sobre cualquier problema que requiera atención.

# Function to print alerts to the console
defprint_alert(message):
print(f"ALERT: {message}")

Las funciones de verificación de estado utilizarán estas funciones para registrar e informar sus hallazgos relevantes.

Creación de funciones de verificación de estado

Para cada verificación de estado, defina una función que encapsulará una prueba específica que evalúe un aspecto crítico de su infraestructura.

Monitoreo del uso de CPU

Comience definiendo una función que monitoreará el uso de la CPU. Esto servirá como un indicador crítico del rendimiento general y la utilización de recursos de un sistema. El uso excesivo de la CPU provoca ralentizaciones del sistema, falta de respuesta e incluso fallos, lo que interrumpe gravemente los servicios esenciales.

Al verificar periódicamente el uso de la CPU y establecer umbrales adecuados, los administradores del sistema pueden identificar cuellos de botella en el rendimiento, procesos que consumen muchos recursos o posibles problemas de hardware.

# Health check functions
defcheck_cpu_usage(threshold=50):
cpu_usage = psutil.cpu_percent(interval=1)

if cpu_usage > threshold:
message = f"High CPU usage detected: {cpu_usage}%"
log_message(message)
print_alert(message)

La función verifica el uso actual de la CPU del sistema. Si el uso de la CPU excede el umbral en porcentaje, registra un mensaje que indica un uso elevado de la CPU e imprime un mensaje de alerta.

Monitoreo del uso de la memoria

Defina otra función que monitoreará el uso de la memoria. Al realizar un seguimiento regular del uso de la memoria, puede detectar pérdidas de memoria, procesos que consumen muchos recursos y posibles cuellos de botella. Este método evita ralentizaciones, fallos e interrupciones del sistema.

defcheck_memory_usage(threshold=80):
memory_usage = psutil.virtual_memory().percent

if memory_usage > threshold:
message = f"High memory usage detected: {memory_usage}%"
log_message(message)
print_alert(message)

De manera similar a la verificación del uso de la CPU, usted establece un umbral para el uso elevado de memoria. Si el uso de la memoria supera el umbral, registra e imprime una alerta.

Monitoreo del espacio en disco

Defina una función que monitoreará el espacio en disco. Al monitorear continuamente la disponibilidad de espacio en disco, puede abordar posibles problemas derivados del agotamiento de los recursos. Quedarse sin espacio en disco puede provocar fallas del sistema, corrupción de datos e interrupciones del servicio. Las comprobaciones de espacio en disco ayudan a garantizar que haya suficiente capacidad de almacenamiento.

defcheck_disk_space(path='/', threshold=75):
disk_usage = psutil.disk_usage(path).percent

if disk_usage > threshold:
message = f"Low disk space detected: {disk_usage}%"
log_message(message)
print_alert(message)

Esta función examina el uso de espacio en disco de una ruta especificada. La ruta predeterminada es el directorio raíz. /. Si el espacio en disco cae por debajo del umbral, registra e imprime una alerta.

Monitoreo del tráfico de red

Defina una función final que monitoreará el flujo de datos de su sistema. Ayudará a la detección temprana de picos inesperados en el tráfico de la red, que podrían ser indicativos de violaciones de seguridad o problemas de infraestructura.

defcheck_network_traffic(threshold=100 * 1024 * 1024):
network_traffic = psutil.net_io_counters().bytes_recv +\
psutil.net_io_counters().bytes_sent

if network_traffic > threshold:
message = f"High network traffic detected: {network_traffic:.2f} MB"
log_message(message)
print_alert(message)

La función monitorea el tráfico de la red sumando los bytes enviados y recibidos. El umbral está en bytes. Si el tráfico de la red excede el umbral, registra e imprime una alerta.

Implementación de la lógica de monitoreo

Ahora que tiene las funciones de verificación de estado, simplemente llame a cada una desde una función de controlador. Puede imprimir el resultado y registrar un mensaje cada vez que se ejecuta esta verificación general:

# Function to run health checks
defrun_health_checks():
print("Monitoring the system...")
log_message("Running system health checks...")

check_cpu_usage()
check_memory_usage()
check_disk_space()
check_network_traffic()

log_message("Health checks completed.")

Esta función ejecuta todas las comprobaciones de salud, proporcionando una vista unificada del estado de salud de su sistema.

Programar comprobaciones automatizadas y ejecutar el programa

Para automatizar el monitoreo a intervalos específicos, utilizará la biblioteca de programación. Puede ajustar el intervalo según sea necesario.

# Schedule health checks to run every minute 
schedule.every(1).minutes.do(run_health_checks)

Ahora ejecute el proceso de monitoreo del sistema en un bucle continuo.

# Main loop to run scheduled tasks
whileTrue:
schedule.run_pending()
time.sleep(1)

Este bucle comprueba continuamente las tareas programadas y las ejecuta cuando llega su momento. Cuando ejecuta el programa, el resultado es el siguiente:

El programa registra los registros de monitoreo en el sistema_monitor.log archivo y muestra una alerta en el terminal.

Avanzando en el programa de monitoreo del sistema

Estas comprobaciones de seguimiento no son las únicas que admite psutil. Puede agregar más funciones de monitoreo, utilizando un enfoque similar, para satisfacer sus necesidades.

También puede mejorar la función de informes para utilizar el correo electrónico en lugar de enviar un mensaje simple en la consola.