script monitor to telegram

Bash Script per Monitorare PC Linux + Notifiche Telegram

🖥️ Guida Completa al tuo System Monitor

Immagina di ricevere un messaggio su Telegram ogni volta che il tuo server inizia a surriscaldarsi, la RAM scoppia o il disco si sta riempiendo o inzia a fallare con la scrittura dei file.

E tutto questo senza installare software pesanti o dashboard complicate. Solo uno script Bash e un po’ di magia Linux.

💡 Benvenuti nella guida definitiva per costruire il tuo sistema di monitoraggio automatico!

🚀 Obiettivo del “progetto”

  • Creare uno script Bash che monitora CPU, RAM, disco, temperatura, SMART e Docker
  • Inviare report automatici su Telegram
  • Capire ogni funzione, comando e parametro
  • Configurare un log locale per la cronologia dei report

Non serve essere esperti di Bash: spiegherò ogni singola riga, così anche chi è alle prime armi potrà capire come funziona.

💡 TROVI LO SCRIPT PRONTO AL DOWNLOAD SUL MIO REPO GITHUB

https://github.com/EnthusiastNewbie/MyLab/tree/main/Script_Server_Monitor

🧩 1. Cos’è e come funziona

Il “Server Monitor System” è un semplice script Bash che:

  1. Legge lo stato del tuo sistema (CPU, RAM, dischi, Docker, ecc.)
  2. Confronta i valori con delle soglie impostate
  3. Genera un report completo
  4. Lo invia su Telegram con emoji, icone e colori per rendere tutto più leggibile
  5. Salva un log su file per consultazioni future

📩 Tutto avviene in automatico, anche da cron (quindi puoi ricevere un report ogni ora, giorno o settimana).

report-telegram-1024x518 Bash Script per Monitorare PC Linux + Notifiche Telegram

⚙️ 2. Configurazione di base

All’inizio dello script troviamo alcune variabili fondamentali:

TELEGRAM_TOKEN="INSERISCI QUI IL TUO TOKEN TELEGRAM"
CHAT_ID="INSERISCI QUI IL TUO CHAT ID"
NAS_PATH="/media/utente/HDD_NAS"
LOG_FILE="/home/utente/SCRIPT_REPORT_SERVER/server_report.log"

🔹 Cosa significano?

  • TELEGRAM_TOKEN: il token che ottieni da @BotFather su Telegram, serve per inviare messaggi.
  • CHAT_ID: è l’ID della chat (o gruppo) dove riceverai i report.
  • NAS_PATH: percorso dove è montato il tuo NAS o disco esterno.
  • LOG_FILE: file dove lo script salverà tutti i report generati.

💡 Consiglio: crea il file di log prima di lanciare lo script, con:

mkdir -p /home/utente/SCRIPT_REPORT_SERVER
touch /home/utente/SCRIPT_REPORT_SERVER/server_report.log

📊 3. Impostazione soglie di allerta

CPU_THRESHOLD=85
DISK_THRESHOLD=90
RAM_THRESHOLD=90

Queste variabili servono per definire le soglie oltre le quali scatta un’allerta.

  • Se la CPU supera l’85% → 🔥
  • Se la RAM è oltre il 90% → ⚠️
  • Se il disco è quasi pieno → ⚠️

🧠 4. Icone e simboli

Nello script è presente una sezione delle emoji:

OK_ICON="✅"
WARN_ICON="⚠️"
ALERT_ICON="🔥"
DISK_ICON="💾"
CPU_ICON="🧠"
RAM_ICON="📊"
DOCKER_ICON="🐳"
TEMP_ICON="🌡️"

Servono solo a rendere il report più leggibile e simpatico, soprattutto su Telegram.

💬 5. La funzione di invio su Telegram

send_telegram_message() {
  local text="$1"
  curl -s -X POST "<https://api.telegram.org/bot$TELEGRAM_TOKEN/sendMessage>" \\
    -d chat_id="$CHAT_ID" \\
    -d parse_mode="Markdown" \\
    -d text="$text" > /dev/null
}

🔍 Cosa succede qui?

  • Usa il comando curl per chiamare le API di Telegram.
  • Invia un messaggio in formato Markdown (così puoi usare grassetto e corsivo).
  • Tutto avviene in silenzio (> /dev/null serve a non mostrare output a schermo).

🧩 6. Funzioni di sistema

Ora arrivano le funzioni che leggono i dati reali dal sistema.

🔹 Uso della CPU

get_cpu_usage() {
  top -bn1 | grep "Cpu(s)" | awk '{print 100 - $8}'
}
  • top -bn1 mostra l’uso della CPU in modalità batch (senza interfaccia).
  • awk '{print 100 - $8}' calcola la percentuale di utilizzo reale, sottraendo l’idle.

💡 Esempio: se la CPU è al 15% idle → l’utilizzo reale è 85%.

🔹 Uso della RAM

get_ram_usage() {
  free | awk '/Mem:/ {printf("%.0f", $3/$2 * 100)}'
}
  • free mostra la memoria usata e disponibile.
  • $3/$2 * 100 calcola la percentuale usata.

🔹 Stato del disco

get_disk_usage_percent() { ... }
get_disk_free_gb() { ... }
  • df mostra lo spazio su disco.
  • awk 'NR==2 {print $5}' estrae solo la percentuale.
  • tr -d '%' rimuove il simbolo % per facilitare i calcoli.

💾 Esempio: 87% di utilizzo → allerta se supera la soglia impostata.

🔹 Temperatura CPU

get_cpu_temp() {
  sensors | awk '/Package id 0:/ {print $4}' | head -n1
}

Richiede il pacchetto lm-sensors.

Ti mostra la temperatura della CPU, utile per capire se la ventilazione funziona.

🔹 Stato SMART dei dischi

smartctl -H /dev/sda

Utilizza il tool smartmontools per verificare la salute dei dischi.

Se il disco mostra “PASSED” → tutto ok ✅

Se mostra errori → è ora di fare un backup 😬

🔹 Processi più pesanti

ps -eo comm,%cpu --sort=-%cpu | awk 'NR>1 && NR<=6 {...}'

Elenca i 5 processi che stanno usando più CPU o RAM.

Molto utile per capire chi sta stressando il sistema.

🔹 Stato Docker

/usr/bin/docker ps -a --format "table {{.Names}}\\t{{.Status}}"

Controlla se i container sono Up o Offline.

Perfetto se usi Docker per servizi self-hosted.

🐳 Esempio: “nginx-proxy-manager — ✅ Online”


📦 7. La funzione send_report

È il cuore dello script ❤️

Qui vengono chiamate tutte le funzioni precedenti, i valori vengono confrontati con le soglie e infine viene inviato il report.

  • Raccolta dati (CPU, RAM, dischi, Docker, SMART)
  • Costruzione del messaggio con printf
  • Log automatico nel file server_report.log
  • Invio del messaggio via Telegram con send_telegram_message

📜 8. Esecuzione manuale e automatica

Per testarlo subito:

bash server_monitor.sh

Se funziona, puoi programmarlo con cron:

crontab -e

E aggiungi ad esempio:

0 * * * * /home/utente/SCRIPT_REPORT_SERVER/server_monitor.sh

💡 Questo comando invia un report ogni ora.

📈 9. Log e analisi

Nel file server_report.log troverai una cronologia come questa:

22/10/2025 10:30:01 | CPU: 32 % | RAM: 58 % | Disco OS: 41 % | NAS: 70 % | CPU Temp: +47.0°C

Puoi aprirlo con cat, less, oppure usarlo per creare grafici nel tempo.

🔧 10. Strumenti usati

ComandoDescrizione
topMostra uso CPU in tempo reale
freeMostra RAM usata/disponibile
dfVisualizza spazio disco
sensorsTemperatura hardware
smartctlStato SMART dischi
psLista processi attivi
dockerStato container
curlInvio dati via HTTP (usato per Telegram)

🎨 11. Miglioramenti possibili

  • Aggiungere grafici o HTML report
  • Mappare i dispositivi connessi alla rete locale con ARP
  • Inviare report anche via email
  • Usare systemd timer al posto di cron
  • Creare un pannello web per i log storici

🧾 12. Conclusione

Hai appena costruito un sistema di monitoraggio completo con solo uno script Bash!

✅ Leggero

✅ Automatico

✅ Personalizzabile

Perfetto per homelab, VPS, mini server casalinghi o Raspberry Pi.


Commento all'articolo