Avec une seule bibliothèque, vous pouvez surveiller une multitude de métriques système et vous assurer que tout fonctionne correctement.
La plupart des organisations s'appuient fortement sur leur infrastructure informatique pour gérer leurs opérations. Des pannes imprévues du système ou une dégradation des performances peuvent entraîner des perturbations, des pertes financières et une atteinte à la réputation.
Les contrôles automatisés de l’état du système sont essentiels pour garantir que l’infrastructure informatique reste stable et fiable. En surveillant les mesures critiques et en détectant rapidement les anomalies, vous pouvez minimiser les temps d'arrêt.
Définir les contrôles de santé
Il est essentiel de définir les contrôles de santé que vous souhaitez effectuer sur votre système. Vous devez établir des critères clairs sur ce que vous surveillerez et pourquoi. Commencez par identifier les principaux objectifs de votre système. Quelles fonctions ou services fournit-il ?
Ensuite, définissez des références de performances basées sur des données historiques et assurez-vous que vos contrôles de santé évaluent l'utilisation efficace des ressources système. Enfin, définissez les seuils qui indiquent un problème. Quel pourcentage d’utilisation des ressources considérez-vous comme élevé ou faible? À quel moment le système doit-il déclencher une alerte ?
Choisir des bibliothèques et configurer votre environnement
Pour automatiser le processus de surveillance du système en Python, vous aurez besoin des bibliothèques suivantes pour vous aider à collecter les métriques du système, puis à planifier les vérifications.
- psutil: Il s'agit d'une bibliothèque multiplateforme qui fournit une interface permettant de récupérer des informations sur l'utilisation du système (CPU, mémoire, disques, réseau, capteurs).
- calendrier: Cette bibliothèque fournit un moyen simple de planifier des tâches à exécuter à des intervalles spécifiques.
- temps: Une bibliothèque intégrée Python que vous utiliserez pour les opérations liées au temps.
- enregistrement: Une autre bibliothèque intégrée que vous utiliserez pour créer des journaux des vérifications de l'état du système.
Commencez à configurer les choses en créer un nouvel environnement virtuel Python. Cela évitera tout conflit potentiel de bibliothèque de versions. Exécutez ensuite la commande de terminal suivante pour installer les bibliothèques requises avec Pip:
pip install psutil schedule
Une fois les bibliothèques installées sur votre système, votre environnement est prêt.
Le code source complet est disponible dans un Dépôt GitHub.
Importer les bibliothèques requises
Créez un nouveau script, surveillance.py, et commencez par importer les bibliothèques requises :
import psutil
import schedule
import time
import logging
L'importation des bibliothèques vous permettra d'utiliser les fonctionnalités qu'elles offrent dans votre code.
Journalisation et rapports
Vous avez besoin d’un moyen d’enregistrer les résultats de vos contrôles de santé. La journalisation constitue un outil essentiel pour capturer et préserver un enregistrement historique des événements et problèmes de débogage dans votre code. Il joue également un rôle essentiel dans l’analyse des performances.
Utilisez la bibliothèque de journalisation intégrée pour créer vos journaux pour ce projet. Vous pouvez enregistrer les messages du journal dans un fichier nommé system_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)
Pour la création de rapports, imprimez un message d'alerte sur la console pour servir de notification immédiate de tout problème nécessitant une attention particulière.
# Function to print alerts to the console
defprint_alert(message):
print(f"ALERT: {message}")
Les fonctions de contrôle de santé utiliseront ces fonctions pour enregistrer et rapporter leurs résultats pertinents.
Création de fonctions de contrôle de santé
Pour chaque bilan de santé, définissez une fonction qui encapsulera un test spécifique évaluant un aspect critique de votre infrastructure.
Surveillance de l'utilisation du processeur
Commencez par définir une fonction qui surveillera l'utilisation du processeur. Cela servira d’indicateur critique de la performance globale d’un système et de l’utilisation des ressources. Une utilisation excessive du processeur entraîne des ralentissements du système, des inréponses et même des pannes, perturbant gravement les services essentiels.
En vérifiant régulièrement l'utilisation du processeur et en définissant des seuils appropriés, les administrateurs système peuvent identifier les goulots d'étranglement en termes de performances, les processus gourmands en ressources ou les problèmes matériels potentiels.
# 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 fonction vérifie l'utilisation actuelle du processeur du système. Si l'utilisation du processeur dépasse le seuil en pourcentage, il enregistre un message indiquant une utilisation élevée du processeur et imprime un message d'alerte.
Surveillance de l'utilisation de la mémoire
Définissez une autre fonction qui surveillera l’utilisation de la mémoire. En suivant régulièrement l'utilisation de la mémoire, vous pouvez détecter les fuites de mémoire, des processus gourmands en ressources et des goulots d'étranglement potentiels. Cette méthode évite les ralentissements, les pannes et les pannes du système.
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)
Semblable à la vérification de l'utilisation du processeur, vous définissez un seuil d'utilisation élevée de la mémoire. Si l'utilisation de la mémoire dépasse le seuil, il enregistre et imprime une alerte.
Surveillance de l'espace disque
Définissez une fonction qui surveillera l'espace disque. En surveillant en permanence la disponibilité de l'espace disque, vous pouvez résoudre les problèmes potentiels liés à l'épuisement des ressources. Un manque d'espace disque peut entraîner des pannes du système, une corruption des données et des interruptions de service. Les vérifications de l'espace disque permettent de garantir qu'il existe une capacité de stockage suffisante.
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)
Cette fonction examine l'utilisation de l'espace disque d'un chemin spécifié. Le chemin par défaut est le répertoire racine /. Si l'espace disque tombe en dessous du seuil, il enregistre et imprime une alerte.
Surveillance du trafic réseau
Définissez une fonction finale qui surveillera le flux de données de votre système. Cela aidera à détecter rapidement les pics inattendus du trafic réseau, qui pourraient être révélateurs de failles de sécurité ou de problèmes d'infrastructure.
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 fonction surveille le trafic réseau en additionnant les octets envoyés et reçus. Le seuil est en octets. Si le trafic réseau dépasse le seuil, il enregistre et imprime une alerte.
Implémentation d'une logique de surveillance
Maintenant que vous disposez des fonctions de contrôle de santé, appelez simplement chacune d’elles tour à tour à partir d’une fonction de contrôleur. Vous pouvez imprimer une sortie et enregistrer un message à chaque exécution de cette vérification globale :
# 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.")
Cette fonction exécute toutes les vérifications de l'état, offrant une vue unifiée de l'état de santé de votre système.
Planification des contrôles automatisés et exécution du programme
Pour automatiser la surveillance à des intervalles spécifiques, vous utiliserez la bibliothèque de planification. Vous pouvez ajuster l'intervalle selon vos besoins.
# Schedule health checks to run every minute
schedule.every(1).minutes.do(run_health_checks)
Exécutez maintenant le processus de surveillance du système en boucle continue.
# Main loop to run scheduled tasks
whileTrue:
schedule.run_pending()
time.sleep(1)
Cette boucle vérifie en permanence les tâches planifiées et les exécute le moment venu. Lorsque vous exécutez le programme, le résultat est le suivant :
Le programme enregistre les journaux de surveillance sur le system_monitor.log fichier et affiche une alerte sur le terminal.
Faire progresser le programme de surveillance du système
Ces contrôles de surveillance ne sont pas les seuls pris en charge par psutil. Vous pouvez ajouter davantage de fonctions de surveillance, en utilisant une approche similaire, en fonction de vos besoins.
Vous pouvez également améliorer la fonction de reporting pour utiliser le courrier électronique plutôt que d'afficher un simple message sur la console.