width

Bash monitor per linux server con alerts

Reading Time: 3 minutes

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:

  1. la configurazione è stata impostata in un file di configurazione esterno
  2. è 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.