Il progetto che prevedeva uno script bash per il monitoraggio, tramite crontab, delle risorse di un server Linux e l’invio di un alert al raggiungimento dei valori limite preimpostati, si è evoluto.
Vediamo nel dettaglio le nuove caratteristiche.
Il nuovo software, così come il vecchio, controlla lo stato del sistema per quanto riguarda l’utilizzo della CPU, della RAM e del disco, nonché il carico medio.
Quando viene raggiunta una delle soglie configurate, lo script genera un rapporto di allerta e invia una notifica via e-mail.
Le principali differenze, prensenti nell’ultima versione numerata 3.0.1, sono però due caratteristiche, a nostro avviso, molto interessanti:
- la configurazione è stata impostata in un file di configurazione esterno
- è stata prevista una buil docker così da poterlo utilizzare anche tramite container; si hanno quindi du epossibilità
- esecuzione tramite crontab della macchina
- esecuzione tramite tramite container docker
1 – Configurazione
Lo script ora supporta un file di configurazione esterno denominato system_monitor.conf, che si trova nella stessa directory di system_monitor.sh. Il file di configurazione predefinito viene caricato automaticamente, ma è anche possibile specificare un file personalizzato.
File di configurazione predefinito
Creare o modificare il file system_monitor.conf inserendo valori simili ai seguenti:
EMAIL_TO="[email protected]"
EMAIL_FROM="[email protected]"
SMTP_HOST="smtp.example.com"
SMTP_PORT=587
SMTP_USER="your_smtp_user"
SMTP_PASSWORD="your_smtp_password"
SMTP_TLS=on
SMTP_STARTTLS=on
CPU_LIMIT=90
RAM_LIMIT=80
DISK_LIMIT=90
LOAD_LIMIT=4
STATE_FILE="/tmp/monitor_sistema_html.state"
HIST_FILE="/tmp/monitor_sistema_storico.csv"
GRAPH_FILE="/tmp/monitor_sistema_grafico.png"
TOP_PROCESSES_LOG="/tmp/top_processes.log"
Impostazioni disponibili
EMAIL_TO: indirizzo e-mail di destinazione per gli avvisi
EMAIL_FROM: indirizzo del mittente utilizzato negli avvisi
SMTP_HOST: host SMTP per l’invio dell’e-mail di avviso
SMTP_PORT: porta SMTP da utilizzare
SMTP_USER: nome utente SMTP
SMTP_PASSWORD: password SMTP
SMTP_TLS: utilizza TLS per connettersi al server SMTP (attivato/disattivato)
SMTP_STARTTLS: utilizza STARTTLS quando supportato (on/off)
CPU_LIMIT: soglia di utilizzo per CPU (%) da includere nel rapporto di avviso
RAM_LIMIT: soglia di utilizzo della RAM (%)
DISK_LIMIT: soglia di utilizzo del disco (%)
LOAD_LIMIT: soglia del carico medio
STATE_FILE, HIST_FILE, GRAPH_FILE, TOP_PROCESSES_LOG: sovrascritture opzionali del percorso
Percorso di configurazione personalizzato
E’ possibile utilizzare un percorso di configurazione personalizzato con il comando:
bash system_monitor.sh --config /path/to/system_monitor.conf
Oppure è possibile utilizzare la variabile d’ambiente MONITOR_CONF:
MONITOR_CONF=/path/to/system_monitor.conf bash system_monitor.sh
Modalità di test
E’ possibile eseguire lo script in modalità di prova e generare un avviso senza modificare lo stato del sistema:
bash system_monitor.sh --test
Note
Su Linux lo script legge i file /proc/stat e /proc/loadavg per ottenere i dati relativi alla CPU e al carico di sistema.
Su macOS utilizza comandi alternativi specifici per la piattaforma per ottenere informazioni sui processi e sul tempo di attività.
Se gnuplot non è installato, la generazione del grafico viene saltata con un avviso.
Se mutt non è disponibile, lo script prova a utilizzare sendmail come alternativa.
Docker
Oltre all’esecuzione tramite crontab della macchina, come descritto in precedenza, è possibile eseguire il software tramite container Docker.
Oltre che dal GiHub è possibile scaricare la build del software da Docker Hub

Per compilare l’immagine eseguire:
docker build -t tuxbashsysmonitor .
Per eseguire il container con il file di configurazione montato:
docker run --rm \
-v “$PWD/system_monitor.conf:/app/system_monitor.conf:ro” \
-v /tmp:/tmp \
tuxbashsysmonitor --config /app/system_monitor.conf
Tutte le impostazioni SMTP e di avviso sono definite nel file system_monitor.conf; il container non richiede variabili d’ambiente SMTP.
Se il server SMTP utilizza un certificato autofirmato o un certificato che non corrisponde al nome host, è possibile disabilitare la convalida del certificato a scopo di test aggiungendo questa riga al file system_monitor.conf:
SMTP_TLS_CERTCHECK=off
In alternativa a quanto visto fino ad ora, sempre in riferimento a Docker, è possibile utilizzarere docker-compose per eseguire il software:
docker compose up --build
Il container esegue system_monitor.sh e utilizza il file system_monitor.conf montato.
