Surveillance Serveurs · 7 min read · Oct 08, 2025
Le Cluster Web Parfait Équilibré Et Haute Disponibilité Avec 2 Serveurs Fonctionnant Sous Xen Sur Ubuntu 8.04 Hardy Heron - Page 7
13. Surveillance des Serveurs Avec munin Et monit (web1, web2)
Dans ce chapitre, je vais décrire comment vous pouvez surveiller vos nœuds de serveurs web avec munin et monit. Munin produit de jolis petits graphiques sur presque tous les aspects de votre serveur (moyenne de charge, utilisation de la mémoire, utilisation du CPU, débit MySQL, trafic eth0, etc.) sans beaucoup de configuration, tandis que monit vérifie la disponibilité de services comme Apache, MySQL, Postfix et prend les mesures appropriées, comme un redémarrage, s’il constate qu’un service ne fonctionne pas comme prévu. La combinaison des deux vous offre une surveillance complète : des graphiques qui vous permettent de reconnaître les problèmes actuels ou à venir (comme “Nous avons besoin d’un plus gros serveur bientôt, notre moyenne de charge augmente rapidement.”), et un chien de garde qui garantit la disponibilité des services surveillés.
Bien que munin vous permette de surveiller plus d’un serveur, nous allons uniquement discuter de la surveillance du système où il est installé ici.
13.1 Installer Et Configurer munin
apt-get install munin munin-node
Ensuite, nous devons éditer le fichier de configuration de munin /etc/munin/munin.conf.
mv /etc/munin/munin.conf /etc/munin/munin.conf.bak
vi /etc/munin/munin.conf
Sur 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 yesSur 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 yesSur web1 ET web2
Ensuite, nous créons le répertoire /var/www/example/web/monitoring et changeons sa propriété à l’utilisateur et au groupe munin, sinon munin ne peut pas placer sa sortie dans ce répertoire. Puis nous redémarrons munin :
mkdir -p /var/www/example/web/monitoring
chown munin:munin /var/www/example/web/monitoring
/etc/init.d/munin-node restart
Il est maintenant judicieux de protéger par mot de passe le répertoire /var/www/example/web/monitoring à moins que vous ne souhaitiez que tout le monde puisse voir chaque petite statistique sur votre serveur.
Pour ce faire, nous créons un fichier .htaccess dans /var/www/example/web/monitoring :
vi /var/www/example/web/monitoring/.htaccess
AuthType Basic
AuthName "Membres Uniquement"
AuthUserFile /var/www/example/monitoring/.htpasswd
require valid-user
Ensuite, nous devons créer le fichier de mot de passe /var/www/example/.htpasswd. Nous voulons nous connecter avec le nom d’utilisateur admin, donc nous faisons ceci :
htpasswd -c /var/www/example/web/monitoring/.htpasswd admin
Entrez un mot de passe pour admin, et c’est fait !
Maintenant, vous pouvez accéder aux rapports (cela prendra quelques minutes pour collecter les données) à ces adresses :
http://www.example.com:10001/monitoring pour web1.example.com
et
http://www.example.com:20001/monitoring pour web2.example.com.
13.2 Installer Et Configurer monit
Pour installer monit, nous faisons ceci :
apt-get install monit
Maintenant, nous devons éditer /etc/monit/monitrc. Le fichier par défaut /etc/monit/monitrc a beaucoup d’exemples, et vous pouvez trouver plus d’exemples de configuration sur http://www.tildeslash.com/monit/doc/examples.php. Cependant, dans mon cas, je veux surveiller proftpd, mysql, apache et postfix, je veux activer l’interface web de monit sur le port 2812, je veux une interface web https, je veux me connecter à l’interface web avec le nom d’utilisateur admin et le mot de passe test, et je veux que monit envoie des alertes par email à root@localhost, donc mon fichier ressemble à ceci :
Sur 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 timeoutSur 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 timeoutLe fichier de configuration est assez explicite ; si vous n’êtes pas sûr d’une option, jetez un œil à la documentation de monit : http://www.tildeslash.com/monit/doc/manual.php
Dans la partie apache de la configuration de monit, vous trouvez ceci :
if failed host www.example.com port 80 protocol http
and request "/example/web/monit/token" then restartce qui signifie que monit essaie de se connecter à www.example.com sur le port 80 et essaie d’accéder au fichier /monit/token qui est /var/www/example/web/monit/token car la racine de document de notre site web est /var/www/example/web. Si monit ne réussit pas, cela signifie qu’Apache ne fonctionne pas, et monit va le redémarrer.
Sur web1 ET web2
Maintenant, nous devons créer le fichier /var/www/example/web/monit/token et y écrire une chaîne aléatoire :
mkdir /var/www/example/web/monit
echo “hello” > /var/www/example/web/monit/token
Ensuite, nous créons le certificat pem (/var/certs/monit.pem) dont nous avons besoin pour l’interface web de monit cryptée SSL :
mkdir /var/certs
cd /var/certs
Nous avons besoin d’un fichier de configuration OpenSSL pour créer notre certificat. Il peut ressembler à ceci :
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 = serverMaintenant, nous créons le certificat comme ceci :
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
Ensuite, nous éditons /etc/default/monit pour activer le démon monit. Changez startup à 1 et définissez CHECK_INTERVALS sur l’intervalle en secondes que vous souhaitez que monit vérifie votre système. Je choisis 60 (secondes) donc mon fichier ressemble à ceci :
vi /etc/default/monit
# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen
# Vous devez définir cette variable pour que monit démarre
startup=1
# Pour changer les intervalles auxquels monit doit s'exécuter, décommentez
# et changez cette variable.
CHECK_INTERVALS=60Enfin, nous pouvons démarrer monit :
/etc/init.d/monit start
Maintenant, pointez votre navigateur vers https://192.168.1.104:2812/ ou https://192.168.1.105:2812/, connectez-vous avec admin et test, et vous devriez voir l’interface web de monit.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.