Con un'unica libreria, puoi monitorare una serie di parametri di sistema e assicurarti che tutto funzioni senza intoppi.
La maggior parte delle organizzazioni fa molto affidamento sulla propria infrastruttura IT per eseguire le proprie operazioni. Guasti di sistema non pianificati o degrado delle prestazioni possono portare a interruzioni, perdite finanziarie e danni alla reputazione.
I controlli automatizzati sullo stato del sistema sono fondamentali per garantire che l’infrastruttura IT rimanga stabile e affidabile. Monitorando i parametri critici e rilevando tempestivamente le anomalie, puoi ridurre al minimo i tempi di inattività.
Definizione dei controlli di integrità
È essenziale definire quali controlli di integrità desideri eseguire sul tuo sistema. Dovresti stabilire criteri chiari su cosa monitorare e perché. Inizia identificando gli obiettivi principali del tuo sistema. Quali funzioni o servizi fornisce?
Quindi, imposta parametri di riferimento delle prestazioni basati su dati storici e assicurati che i controlli di integrità valutino l'uso efficiente delle risorse di sistema. Infine, definire le soglie che indicano un problema. Quale percentuale di utilizzo delle risorse consideri alta o bassa? A che punto il sistema dovrebbe attivare un avviso?
Scelta delle librerie e configurazione dell'ambiente
Per automatizzare il processo di monitoraggio del sistema in Python, avrai bisogno delle seguenti librerie per aiutarti a raccogliere le metriche del sistema e quindi pianificare i controlli.
- psutil: Si tratta di una libreria multipiattaforma che fornisce un'interfaccia per il recupero di informazioni sull'utilizzo del sistema (CPU, memoria, dischi, rete, sensori).
- programma: questa libreria fornisce un modo semplice per pianificare l'esecuzione delle attività a intervalli specifici.
- tempo: una libreria integrata Python che utilizzerai per operazioni legate al tempo.
- registrazione: un'altra libreria integrata che utilizzerai per creare registri dei controlli di integrità del sistema.
Inizia a impostare le cose entro creando un nuovo ambiente virtuale Python. Ciò impedirà qualsiasi potenziale conflitto della libreria di versioni. Quindi esegui il seguente comando da terminale a installa le librerie richieste con Pip:
pip install psutil schedule
Una volta installate le librerie sul tuo sistema, il tuo ambiente è pronto.
Il codice sorgente completo è disponibile in a Repositorio GitHub.
Importazione delle librerie richieste
Crea un nuovo script, monitoraggio.pye inizialo importando le librerie richieste:
import psutil
import schedule
import time
import logging
L'importazione delle librerie ti consentirà di utilizzare le funzionalità che offrono nel tuo codice.
Registrazione e reporting
Hai bisogno di un modo per registrare i risultati dei tuoi controlli sanitari. La registrazione funge da strumento vitale per acquisire e preservare una registrazione storica di eventi e problemi di debug nel codice. Svolge anche un ruolo fondamentale nell’analisi delle prestazioni.
Utilizza la libreria di log integrata per creare i tuoi log per questo progetto. È possibile salvare i messaggi di registro in un file denominato monitor_sistema.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)
Per la reportistica, stampa un messaggio di avviso sulla console che funge da notifica immediata su eventuali problemi che richiedono attenzione.
# Function to print alerts to the console
defprint_alert(message):
print(f"ALERT: {message}")
Le funzioni di controllo dello stato utilizzeranno queste funzioni per registrare e segnalare i risultati rilevanti.
Creazione di funzioni di controllo dello stato
Per ogni controllo dello stato, definisci una funzione che incapsulerà un test specifico che valuterà un aspetto critico della tua infrastruttura.
Monitoraggio dell'utilizzo della CPU
Inizia definendo una funzione che monitorerà l'utilizzo della CPU. Ciò fungerà da indicatore critico delle prestazioni generali del sistema e dell'utilizzo delle risorse. L'utilizzo eccessivo della CPU porta a rallentamenti del sistema, mancata risposta e persino arresti anomali, interrompendo gravemente i servizi essenziali.
Controllando regolarmente l'utilizzo della CPU e impostando soglie appropriate, gli amministratori di sistema possono identificare colli di bottiglia nelle prestazioni, processi ad uso intensivo di risorse o potenziali problemi 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 funzione controlla l'utilizzo corrente della CPU del sistema. Se l'utilizzo della CPU supera la soglia in percentuale, registra un messaggio che indica un utilizzo elevato della CPU e stampa un messaggio di avviso.
Monitoraggio dell'utilizzo della memoria
Definire un'altra funzione che monitorerà l'utilizzo della memoria. Monitorando regolarmente l'utilizzo della memoria, puoi farlo rilevare perdite di memoria, processi affamati di risorse e potenziali colli di bottiglia. Questo metodo previene rallentamenti, arresti anomali e interruzioni 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)
Analogamente al controllo dell'utilizzo della CPU, imposti una soglia per l'utilizzo elevato della memoria. Se l'utilizzo della memoria supera la soglia, registra e stampa un avviso.
Monitoraggio dello spazio su disco
Definire una funzione che monitorerà lo spazio su disco. Monitorando continuamente la disponibilità dello spazio su disco, è possibile risolvere potenziali problemi derivanti dall'esaurimento delle risorse. L'esaurimento dello spazio su disco può provocare arresti anomali del sistema, danneggiamento dei dati e interruzioni del servizio. I controlli dello spazio su disco aiutano a garantire che vi sia una capacità di archiviazione sufficiente.
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)
Questa funzione esamina l'utilizzo dello spazio su disco di un percorso specificato. Il percorso predefinito è la directory root /. Se lo spazio su disco scende al di sotto della soglia, registra e stampa un avviso.
Monitoraggio del traffico di rete
Definisci una funzione finale che monitorerà il flusso di dati del tuo sistema. Aiuterà a rilevare tempestivamente picchi imprevisti nel traffico di rete, che potrebbero essere indicativi di violazioni della sicurezza o problemi infrastrutturali.
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 funzione monitora il traffico di rete sommando i byte inviati e ricevuti. La soglia è in byte. Se il traffico di rete supera la soglia, registra e stampa un avviso.
Implementazione della logica di monitoraggio
Ora che hai le funzioni di controllo dello stato, chiamale semplicemente ciascuna a turno da una funzione del controller. È possibile stampare l'output e registrare un messaggio ogni volta che viene eseguito questo controllo generale:
# 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.")
Questa funzione esegue tutti i controlli di integrità, fornendo una visione unificata dello stato di integrità del sistema.
Pianificazione dei controlli automatizzati ed esecuzione del programma
Per automatizzare il monitoraggio a intervalli specifici, utilizzerai la libreria di pianificazione. È possibile regolare l'intervallo secondo necessità.
# Schedule health checks to run every minute
schedule.every(1).minutes.do(run_health_checks)
Ora esegui il processo di monitoraggio del sistema in un ciclo continuo.
# Main loop to run scheduled tasks
whileTrue:
schedule.run_pending()
time.sleep(1)
Questo ciclo controlla continuamente le attività pianificate e le esegue quando arriva il momento. Quando si esegue il programma l'output è il seguente:
Il programma registra i log di monitoraggio sul file monitor_sistema.log file e visualizza un avviso sul terminale.
Avanzamento del programma di monitoraggio del sistema
Questi controlli di monitoraggio non sono gli unici supportati da psutil. Puoi aggiungere più funzioni di monitoraggio, utilizzando un approccio simile, per soddisfare le tue esigenze.
Puoi anche migliorare la funzione di reporting per utilizzare la posta elettronica anziché inviare un semplice messaggio sulla console.