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 yes

Sur 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

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

Sur 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

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

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

Maintenant, 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=60

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

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.