Server Monitoring · 12 min read · Oct 15, 2025
Monitoraggio del Server con Munin e Monit su Debian 10

In questo articolo, descrivo come puoi monitorare il tuo server Debian 10 (Buster) con Munin e Monit. Munin genera grafici carini su quasi ogni aspetto del tuo server (carico medio, utilizzo della memoria, utilizzo della CPU, throughput di MySQL, traffico di rete, ecc.) senza molta configurazione, mentre Monit controlla la disponibilità di servizi come Apache, MySQL, Postfix e intraprende l’azione appropriata come un riavvio se trova che un servizio non si comporta come previsto. Combinando i due ottieni un monitoraggio completo: grafici che ti permettono di vedere problemi attuali o imminenti (ad esempio, “Abbiamo bisogno di un server più grande presto, il nostro carico medio sta aumentando rapidamente.”), e un watchdog che garantisce la disponibilità dei servizi monitorati.
Sebbene tu possa monitorare più di un server con Munin, discuteremo solo del monitoraggio del sistema su cui è installato qui.
Questa guida è stata scritta per Debian 10 (Buster), ma la configurazione dovrebbe applicarsi anche ad altre distribuzioni come Ubuntu con lievi modifiche.
1 Nota Preliminare
Tutti i comandi in questo tutorial vengono eseguiti come utente root. Accedi al tuo server come root tramite SSH o apri una finestra del terminale. Se accedi come un utente diverso da root, usa il comando
su -per diventare l’utente root, prima di procedere.
Il nome host del nostro sistema è server1.example.com, e abbiamo un sito web www.example.com su di esso con la radice del documento /var/www/www.example.com/web.
Assicurati che il sistema sia aggiornato prima di iniziare a installare Munin, esegui:
apt update
apt upgradeApache è utilizzato per mostrare le pagine di Munin, il modulo apache fcgid è necessario per la funzione di zoom dei grafici di Munin. Installa apache e il modulo fcgid con apt.
apt install apache2 libcgi-fast-perl libapache2-mod-fcgidAbilita il modulo fcgid in apache.
a2enmod fcgid2 Installa e Configura Munin
Per installare Munin su Debian, facciamo così:
apt install munin munin-node munin-plugins-extraQuando il server esegue MySQL o MariaDB, abilita alcuni plugin extra di Munin per monitorare MySQL:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threadsSuccessivamente, dobbiamo modificare il file di configurazione di Munin /etc/munin/munin.conf. Decommenta le righe dbdir, htmldir, logdir, rundir e tmpldir (i valori predefiniti vanno bene). Vogliamo che Munin utilizzi il nome server1.example.com invece di localhost.localdomain nell’output HTML, quindi sostituiamo localhost.localdomain con server1.example.com nella sezione dell’albero host semplice. Senza i commenti, il file modificato appare così:
nano /etc/munin/munin.conf# Esempio di file di configurazione per Munin, generato da 'make build'
# Le prossime tre variabili specificano dove si trovano i database RRD,
# l'output HTML, i log e i file lock/pid. Devono tutti
# essere scrivibili dall'utente che esegue munin-cron. Sono tutti
# impostati sui valori che vedi qui.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin
# Dove cercare i modelli HTML
#
tmpldir /etc/munin/templates
# Dove cercare i file statici www
#
#staticdir /etc/munin/static
# i file cgi temporanei sono qui. nota che deve essere scrivibile da
# l'utente cgi (di solito nobody o httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp
# (Esattamente uno) directory da includere tutti i file.
includedir /etc/munin/munin-conf.d
[...]
# un semplice albero host
[server1.example.com]
address 127.0.0.1
use_node_name yes
[...] Dobbiamo trovare il file di configurazione di Apache 2.4 per Munin /etc/munin/apache24.conf - definisce un alias chiamato munin per la directory di output HTML di Munin /var/cache/munin/www, il che significa che possiamo accedere a munin da tutti i siti web su questo server utilizzando il percorso relativo /munin (ad esempio, http://www.example.com/munin).
La configurazione di apache Munin non è abilitata per impostazione predefinita, questo è stato cambiato da DebianWheezy a Jessie. La nuova directory di configurazione è /etc/apache2/conf-enabled invece di /etc/apache2/conf.d che era utilizzata in versioni più vecchie come Wheezy e Squeeze.
Esegui questi comandi per abilitare e caricare la configurazione in apache.
cd /etc/apache2/conf-enabled/
ln -s /etc/munin/apache24.conf munin.conf
service apache2 restartAssicurati di commentare la riga Require local e aggiungere Require all granted e Options FollowSymLinks SymLinksIfOwnerMatch invece (altrimenti potrai accedere all’output di Munin solo da localhost):
nano /etc/munin/apache24.confAlias /munin /var/cache/munin/www
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
SetHandler fcgid-script
SetHandler cgi-script
Riavvia Apache:
systemctl restart apache2.serviceQuindi riavvia Munin:
systemctl restart munin-node.serviceOra aspetta qualche minuto affinché Munin possa produrre il suo primo output, e poi vai su http://www.example.com/munin/ nel tuo browser, e vedrai le prime statistiche:

(Questo è solo un piccolo estratto dei molti grafici che munin produce…)
3 Proteggi con Password la Directory di Output di Munin (Opzionale ma altamente raccomandato)
Ora è una buona idea proteggere con password la directory di output di munin a meno che tu non voglia che tutti possano vedere ogni piccola statistica sul tuo server.
Per fare ciò, dobbiamo creare il file di password /etc/munin/munin-htpasswd. Vogliamo accedere con il nome utente admin, quindi facciamo così:
htpasswd -c /etc/munin/munin-htpasswd adminInserisci una password per admin. Quindi apri di nuovo /etc/munin/apache24.conf…
nano /etc/munin/apache24.conf… commenta “Require all granted” e aggiungi le righe che ho contrassegnato in rosso:
Alias /munin /var/cache/munin/www
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
Options None
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
SetHandler fcgid-script
SetHandler cgi-script
Quindi riavvia Apache:
systemctl restart apache2.service4 Abilita Moduli Aggiuntivi in Munin
Il comando Munin “munin-node-configure –suggest” può essere utilizzato per ottenere raccomandazioni per moduli aggiuntivi di Munin che possono essere abilitati sul server. Esegui:
munin-node-configure --suggestL’output dovrebbe essere simile a questo:

La colonna “used” mostra se un modulo è abilitato, la colonna “Suggestions” mostra se il server esegue un servizio che può essere monitorato da questo modulo. Crea un symlink per il modulo in /etc/munin/plugins per abilitarlo.
Qui abiliterò i moduli apache_* ad esempio:
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volumeRiavvia Munin per caricare la nuova configurazione.
systemctl restart munin-node.service5 Installa e Configura Monit
Monit è disponibile dal repository backports di Debian Buster. Questo repository non è abilitato per impostazione predefinita, quindi dobbiamo aggiungerlo prima. Esegui questo comando:
echo 'deb http://ftp.de.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.liste poi aggiorna le liste dei pacchetti con:
apt updatePer installare Monit, facciamo così:
apt install monitOra dobbiamo modificare /etc/monit/monitrc. Il file predefinito /etc/monit/monitrc ha molti esempi, e puoi trovare ulteriori esempi di configurazione su http://mmonit.com/monit/documentation/. Tuttavia, nel mio caso voglio monitorare proftpd, sshd, mysql, apache e postfix, voglio abilitare l’interfaccia web di Monit sulla porta 2812, voglio un’interfaccia web https, voglio accedere all’interfaccia web con il nome utente admin e la password howtoforge, e voglio che Monit invii avvisi via email a root@localhost, quindi il mio file appare così (ho aggiunto esempi per altri demoni alla configurazione in modo che tu possa adattare il file alle tue esigenze):
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrcset daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert root@localhost
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:howtoforge
check process sshd with pidfile /var/run/sshd.pid
start program "/usr/sbin/service ssh start"
stop program "/usr/sbin/service ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2/apache2.pid
group www
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
if failed host localhost port 80 protocol http
and request "/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then restart
if totalmem > 500 MB for 5 cycles then restart
if children > 250 then restart
if loadavg(5min) greater than 10 for 8 cycles then stop
if 3 restarts within 5 cycles then timeout
# ---------------------------------------------------------------------------------------------
# NOTA: Sostituisci example.pid con il nome pid del tuo server, il nome dipende dal nome host
# ---------------------------------------------------------------------------------------------
#check process mysql with pidfile /var/lib/mysql/example.pid
# group database
# start program = "/usr/sbin/service mysql start"
# stop program = "/usr/sbin/service mysql stop"
# if failed host 127.0.0.1 port 3306 then restart
# if 5 restarts within 5 cycles then timeout
#check process proftpd with pidfile /var/run/proftpd.pid
# start program = "/usr/sbin/service proftpd start"
# stop program = "/usr/sbin/service proftpd stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process postfix with pidfile /var/spool/postfix/pid/master.pid
# group mail
# start program = "/usr/sbin/service postfix start"
# stop program = "/usr/sbin/service postfix stop"
# if failed port 25 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process nginx with pidfile /var/run/nginx.pid
# start program = "/usr/sbin/service nginx start"
# stop program = "/usr/sbin/service nginx stop"
# if failed host 127.0.0.1 port 80 then restart
#
#check process memcached with pidfile /var/run/memcached.pid
# start program = "/usr/sbin/service memcached start"
# stop program = "/usr/sbin/service memcached stop"
# if failed host 127.0.0.1 port 11211 then restart
#
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid
# start program = "/usr/sbin/service pure-ftpd-mysql start"
# stop program = "/usr/sbin/service pure-ftpd-mysql stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process named with pidfile /var/run/named/named.pid
# start program = "/usr/sbin/service bind9 start"
# stop program = "/usr/sbin/service bind9 stop"
# if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
# if failed host 127.0.0.1 port 53 type udp protocol dns then restart
# if 5 restarts within 5 cycles then timeout
#
#check process ntpd with pidfile /var/run/ntpd.pid
# start program = "/usr/sbin/service ntp start"
# stop program = "/usr/sbin/service ntp stop"
# if failed host 127.0.0.1 port 123 type udp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process mailman with pidfile /var/run/mailman/mailman.pid
# group mail
# start program = "/usr/sbin/service mailman start"
# stop program = "/usr/sbin/service mailman stop"
#
#check process amavisd with pidfile /var/run/amavis/amavisd.pid
# group mail
# start program = "/usr/sbin/service amavis start"
# stop program = "/usr/sbin/service amavis stop"
# if failed port 10024 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap with pidfile /var/run/courier/imapd.pid
# group mail
# start program = "/usr/sbin/service courier-imap start"
# stop program = "/usr/sbin/service courier-imap stop"
# if failed host localhost port 143 type tcp protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-imap-ssl start"
# stop program = "/usr/sbin/service courier-imap-ssl stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid
# group mail
# start program = "/usr/sbin/service courier-pop start"
# stop program = "/usr/sbin/service courier-pop stop"
# if failed host localhost port 110 type tcp protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-pop-ssl start"
# stop program = "/usr/sbin/service courier-pop-ssl stop"
# if failed host localhost port 995 type tcpssl sslauto protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process dovecot with pidfile /var/run/dovecot/master.pid
# group mail
# start program = "/usr/sbin/service dovecot start"
# stop program = "/usr/sbin/service dovecot stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeoutIl file di configurazione è piuttosto autoesplicativo; se non sei sicuro riguardo a un’opzione, dai un’occhiata alla documentazione di Monit: http://mmonit.com/monit/documentation/monit.html
Nella parte apache della configurazione di Monit trovi questo:
if failed host localhost port 80 protocol http
and request "/monit/token" then restartche significa che Monit cerca di connettersi a localhost sulla porta 80 e cerca di accedere al file /monit/token che è /var/www/html/monit/token perché la radice del documento del nostro sito web è /var/www/html. Se Monit non riesce, significa che Apache non è in esecuzione, e Monit lo riavvierà. Ora dobbiamo creare il file /var/www/html/monit/token e scrivere una stringa casuale al suo interno:
mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/tokenSuccessivamente creiamo il certificato pem (/var/certs/monit.pem) di cui abbiamo bisogno per l’interfaccia web di Monit crittografata SSL:
mkdir /var/certs
cd /var/certsAbbiamo bisogno di un file di configurazione OpenSSL per creare il nostro certificato. Può apparire così:
nano /var/certs/monit.cnf# crea certificati RSA - Server
[ req ]
default_bits = 2048
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Monitoria
localityName = Locality Name (eg, city)
localityName_default = Monittown
organizationName = Organization Name (eg, company)
organizationName_default = Monit Inc.
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Dept. of Monitoring Technologies
commonName = Common Name (FQDN of your server)
commonName_default = server.monit.mo
emailAddress = Email Address
emailAddress_default = [email protected]
[ cert_type ]
nsCertType = serverOra creiamo il certificato in questo modo:
openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pemopenssl dhparam 2048 >> /var/certs/monit.pemopenssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pemchmod 600 /var/certs/monit.pemInfine, possiamo avviare Monit:
service monit restartOra punta il tuo browser su https://www.example.com:2812/ (assicurati che la porta 2812 non sia bloccata dal tuo firewall), accedi con admin e howtoforge, e dovresti vedere l’interfaccia web di Monit. Dovrebbe apparire così:

(Schermata principale)


(Pagina di stato SSHd)
A seconda della tua configurazione in /etc/monit/monitrc, monit riavvierà i tuoi servizi se falliscono e invierà email di notifica se gli ID processo dei servizi cambiano, ecc.
Per ottenere lo stato di Monit nella shell, esegui il comando “monit status”:
monit statusIl comando mostrerà lo stato di tutti i servizi monitorati.

6 Link
- munin: http://munin-monitoring.org/
- monit: http://mmonit.com/monit/
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.