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 yes

Su 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 yes

Su 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 timeout

Su 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 timeout

Il 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 restart

che 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 = server

Ora 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=60

Infine, 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.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.