Monitoraggio Server · 6 min read · Oct 08, 2025
Il Carico Bilanciato Perfetto & Cluster Web ad Alta Disponibilità Con 2 Server Che Eseguono Xen Su Ubuntu 8.04 Hardy Heron - Pagina 7
13. Monitoraggio del Server Con munin E monit (web1, web2)
In questo capitolo descriverò come puoi monitorare i tuoi nodi webserver con munin e monit. Munin produce graziose piccole grafiche su quasi ogni aspetto del tuo server (carico medio, utilizzo della memoria, utilizzo della CPU, throughput MySQL, traffico eth0, ecc.) senza molta configurazione, mentre monit controlla la disponibilità di servizi come Apache, MySQL, Postfix e prende le azioni appropriate come un riavvio se trova che un servizio non si comporta come previsto. La combinazione dei due ti offre un monitoraggio completo: grafici che ti permettono di riconoscere problemi attuali o imminenti (come “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 munin ti consenta di monitorare più di un server, discuteremo solo il monitoraggio del sistema in cui è installato qui.
13.1 Installa E Configura munin
apt-get install munin munin-node
Successivamente, dobbiamo modificare il file di configurazione di munin /etc/munin/munin.conf.
mv /etc/munin/munin.conf /etc/munin/munin.conf.bak
vi /etc/munin/munin.conf
Su web1.example.com
dbdir /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[web1.example.com]
address 127.0.0.1
use_node_name yesSu web2.example.com
dbdir /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[web2.example.com]
address 127.0.0.1
use_node_name yesSu web1 E web2
Successivamente creiamo la directory /var/www/example/web/monitoring e cambiamo la sua proprietà all’utente e al gruppo munin, altrimenti munin non può posizionare il suo output in quella directory. Poi riavviamo munin:
mkdir -p /var/www/example/web/monitoring
chown munin:munin /var/www/example/web/monitoring
/etc/init.d/munin-node restart
Ora è una buona idea proteggere con password la directory /var/www/example/web/monitoring a meno che tu non voglia che tutti possano vedere ogni piccola statistica sul tuo server.
Per fare questo, creiamo un file .htaccess in /var/www/example/web/monitoring:
vi /var/www/example/web/monitoring/.htaccess
AuthType Basic
AuthName "Solo Membri"
AuthUserFile /var/www/example/monitoring/.htpasswd
require valid-user
Poi dobbiamo creare il file di password /var/www/example/.htpasswd. Vogliamo accedere con il nome utente admin, quindi facciamo questo:
htpasswd -c /var/www/example/web/monitoring/.htpasswd admin
Inserisci una password per admin, e hai finito!
Ora puoi accedere ai report (ci vorranno alcuni minuti per raccogliere i dati) a questi indirizzi :
http://www.example.com:10001/monitoring per web1.example.com
e
http://www.example.com:20001/monitoring per web2.example.com.
13.2 Installa E Configura monit
Per installare monit, facciamo questo:
apt-get install monit
Ora dobbiamo modificare /etc/monit/monitrc. Il file di configurazione predefinito /etc/monit/monitrc ha molti esempi, e puoi trovare ulteriori esempi di configurazione su http://www.tildeslash.com/monit/doc/examples.php. Tuttavia, nel mio caso voglio monitorare proftpd, 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 test, e voglio che monit invii avvisi via email a root@localhost, quindi il mio file appare così:
Su web1.example.com
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc
set daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
# start program = "/etc/init.d/vsftpd start"
# stop program = "/etc/init.d/vsftpd stop"
# if failed host 192.168.1.104 port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2.pid
group www
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host 192.168.1.104 port 80 protocol http
and request "/example/web/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% 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
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
group bind
start program = "/etc/init.d/bind9 start"
stop program = "/etc/init.d/bind9 stop"
if failed port 53 then restart
if 5 restarts within 5 cycles then timeoutSu web2.example.com
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc
set daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
# start program = "/etc/init.d/vsftpd start"
# stop program = "/etc/init.d/vsftpd stop"
# if failed host 192.168.1.105 port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
check process mysql with pidfile /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2.pid
group www
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host 192.168.1.105 port 80 protocol http
and request "/example/web/monit/token" then restart
if cpu is greater than 60% for 2 cycles then alert
if cpu > 80% 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
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
group bind
start program = "/etc/init.d/bind9 start"
stop program = "/etc/init.d/bind9 stop"
if failed port 53 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://www.tildeslash.com/monit/doc/manual.php
Nella parte apache della configurazione di monit trovi questo:
if failed host www.example.com port 80 protocol http
and request "/example/web/monit/token" then restartche significa che monit prova a connettersi a www.example.com sulla porta 80 e prova ad accedere al file /monit/token che è /var/www/example/web/monit/token perché la radice del documento del nostro sito web è /var/www/example/web. Se monit non riesce, significa che Apache non è in esecuzione, e monit lo riavvierà.
Su web1 E web2
Ora dobbiamo creare il file /var/www/example/web/monit/token e scrivere una stringa casuale al suo interno:
mkdir /var/www/example/web/monit
echo “hello” > /var/www/example/web/monit/token
Successivamente 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/certs
Abbiamo bisogno di un file di configurazione OpenSSL per creare il nostro certificato. Può apparire così:
vi /var/certs/monit.cnf
# create RSA certs - Server
RANDFILE = ./openssl.rnd
[ req ]
default_bits = 1024
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.pem
openssl gendh 512 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 700 /var/certs/monit.pem
Dopo di che modifichiamo /etc/default/monit per abilitare il demone monit. Cambia startup in 1 e imposta CHECK_INTERVALS all’intervallo in secondi che desideri che monit controlli il tuo sistema. Scelgo 60 (secondi) quindi il mio file appare così:
vi /etc/default/monit
# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen
# Devi impostare questa variabile affinché monit parta
startup=1
# Per cambiare gli intervalli in cui monit dovrebbe girare, decommenta
# e modifica questa variabile.
CHECK_INTERVALS=60Infine, possiamo avviare monit:
/etc/init.d/monit start
Ora punta il tuo browser a https://192.168.1.104:2812/ o https://192.168.1.105:2812/, accedi con admin e test, e dovresti vedere l’interfaccia web di monit.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.