Surveillance serveur · 5 min read · Oct 17, 2025

Surveillance du serveur avec Munin et Monit sur CentOS 7.2 - Page 2

5 Installer et configurer Monit

Ensuite, nous allons installer Monit :

yum -y install monit

Puis nous créons les liens de démarrage système pour Monit :

systemctl enable monit  
systemctl start monit

Le fichier de configuration par défaut de Monit est /etc/monitrc où vous pouvez trouver quelques exemples de configuration (vous pouvez trouver plus d’exemples de configuration sur http://mmonit.com/wiki/Monit/ConfigurationExamples) qui sont tous commentés, mais cela indique à Monit de chercher également dans le répertoire /etc/monit.d pour des fichiers de configuration.

Dans ce cas, je vais surveiller :

  • proftpd
  • sshd
  • MariaDB
  • apache
  • postfix

De plus, je vais configurer ces paramètres pour Monit :

  • Activer l’interface web de Monit sur le port 2812.
  • Utiliser HTTPS pour l’interface web au lieu de HTTP.
  • Configurer un accès protégé par mot de passe pour l’interface web.
  • Monit doit envoyer des alertes par email à root@localhost.

Tout d’abord, je vais configurer les paramètres d’authentification. Ouvrez le fichier /etc/monitrc

nano /etc/monitrc

Et faites défiler jusqu’à ce que vous trouviez cette section :

set httpd port 2812 and  
   use address localhost # n'accepter que les connexions de localhost  
   allow localhost # permettre à localhost de se connecter au serveur et  
   allow admin:monit # exiger l'utilisateur 'admin' avec le mot de passe 'monit'  
   allow @monit # permettre aux utilisateurs du groupe 'monit' de se connecter (rw)  
   allow @users readonly # permettre aux utilisateurs du groupe 'users' de se connecter en lecture seule

Remplacez-le par les paramètres suivants :

set httpd port 2812 and  
   use address 0.0.0.0  
   SSL ENABLE  
   PEMFILE /var/certs/monit.pem  
   allow admin:test

Le mot “test” est le mot de passe, veuillez le remplacer par un mot de passe sécurisé et vous voudrez peut-être également changer le nom d’utilisateur “admin” par un nom qui ne peut pas être deviné facilement.

Maintenant, nous ajoutons la configuration pour les services surveillés. Au lieu de modifier /etc/monitrc, nous créons un nouveau fichier de configuration /etc/monit.d/monitrc.

Mon fichier ressemble à ceci :

nano /etc/monit.d/monitrc
set logfile syslog facility log_daemon
  
# Envoyer des emails via ce serveur de messagerie  
set mailserver localhost
  
# Définir l'adresse de l'expéditeur des emails d'alerte  
set mail-format { from: [email protected] }
  
# Envoyer des alertes à cette adresse  
set alert root@localhost
  
# Surveiller le service Proftpd
check process proftpd with pidfile /var/run/proftpd/proftpd.pid
   start program = "/usr/bin/systemctl start proftpd"
   stop program  = "/usr/bin/systemctl stop proftpd"
   if failed port 21 protocol ftp then restart
   if 5 restarts within 5 cycles then timeout
  
# Surveiller le service SSH
check process sshd with pidfile /var/run/sshd.pid
   start program  "/usr/bin/systemctl start sshd"
   stop program  "/usr/bin/systemctl stop sshd"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout
  
# Surveiller MariaDB
check process mysql with pidfile /var/run/mariadb/mariadb.pid
   group database
   start program = "/usr/bin/systemctl start mariadb"
   stop program = "/usr/bin/systemctl stop mariadb"
   if failed host 127.0.0.1 port 3306 then restart
   if 5 restarts within 5 cycles then timeout
  
# Surveiller le serveur web apache
check process apache with pidfile /var/run/httpd/httpd.pid
   group www
   start program = "/usr/bin/systemctl start httpd"
   stop program  = "/usr/bin/systemctl stop httpd"
   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
  
# Surveiller le serveur de messagerie postfix
check process postfix with pidfile /var/spool/postfix/pid/master.pid
   group mail
   start program = "/usr/bin/systemctl start postfix"
   stop  program = "/usr/bin/systemctl stop postfix"
   if failed port 25 protocol smtp then restart
   if 5 restarts within 5 cycles then timeout

(Veuillez vous assurer que vous vérifiez uniquement les processus qui existent réellement sur votre serveur - sinon monit ne démarrera pas. C’est-à-dire, si vous dites à monit de vérifier Postfix, mais que Postfix n’est pas installé sur le système, monit ne démarrera pas.)

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://mmonit.com/monit/documentation/monit.html

Dans la partie apache de la configuration de Monit, vous trouvez ceci :

   if failed host localhost port 80 protocol http
      and request "/monit_token" then restart

ce qui signifie que Monit essaie de se connecter à localhost sur le port 80 et essaie d’accéder au fichier /monit_token qui est /var/www/html/monit_token parce que la racine de notre site web est /var/www/html. Si Monit ne réussit pas, cela signifie qu’Apache ne fonctionne pas, et Monit va le redémarrer. Maintenant, nous devons créer le fichier /var/www/html/monit_token et y écrire une chaîne aléatoire :

touch /var/www/html/monit_token

Ensuite, nous créons le certificat SSL (pem) (/var/certs/monit.pem) dont nous avons besoin pour l’interface web 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 :

nano /var/certs/monit.cnf
# créer des certificats RSA - Serveur

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Nom du pays (code à 2 lettres)
countryName_default = MO

stateOrProvinceName             = Nom de l'État ou de la province (nom complet)
stateOrProvinceName_default     = Monitoria

localityName                    = Nom de la localité (par exemple, ville)
localityName_default            = Monittown

organizationName                = Nom de l'organisation (par exemple, entreprise)
organizationName_default        = Monit Inc.

organizationalUnitName          = Nom de l'unité organisationnelle (par exemple, section)
organizationalUnitName_default  = Dept. des technologies de surveillance

commonName                      = Nom commun (FQDN de votre serveur)
commonName_default              = server.monit.mo

emailAddress                    = Adresse e-mail
emailAddress_default            = [email protected]

[ cert_type ]
nsCertType = serveur

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

Enfin, nous pouvons démarrer Monit :

systemctl restart monit

Maintenant, dirigez votre navigateur vers https://www.example.com:2812/ (assurez-vous que le port 2812 n’est pas bloqué par votre pare-feu), connectez-vous avec admin et test, et vous devriez voir l’interface web de Monit. Elle devrait ressembler à ceci :

Le tableau de bord Monit.

(Écran principal)

La page d'état apache de Monit.

(Page d’état Apache)

Selon votre configuration dans /etc/monit.d/monitrc, Monit redémarrera vos services s’ils échouent et enverra des emails de notification si les ID de processus des services changent, etc.

6 Liens

Share: X/Twitter LinkedIn

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

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