Surveillance serveur · 13 min read · Oct 15, 2025
Surveillance du serveur avec Munin et Monit sur Debian 10

Dans cet article, je décris comment vous pouvez surveiller votre serveur Debian 10 (Buster) avec Munin et Monit. Munin génère 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 réseau, 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 voir les problèmes actuels ou imminents (par exemple, “Nous avons bientôt besoin d’un serveur plus grand, notre moyenne de charge augmente rapidement.”), et un chien de garde qui garantit la disponibilité des services surveillés.
Bien que vous puissiez surveiller plus d’un serveur avec Munin, nous ne discuterons ici que de la surveillance du système sur lequel il est installé.
Ce guide a été écrit pour Debian 10 (Buster), mais la configuration devrait également s’appliquer à d’autres distributions comme Ubuntu avec quelques modifications mineures.
1 Remarque préliminaire
Tous les commandes de ce tutoriel sont exécutées en tant qu’utilisateur root. Connectez-vous à votre serveur en tant que root par SSH ou ouvrez une fenêtre de terminal. Si vous vous connectez en tant qu’utilisateur différent de root, utilisez la commande
su -pour devenir l’utilisateur root, avant de continuer.
Le nom d’hôte de notre système est server1.example.com, et nous avons un site web www.example.com dessus avec le répertoire racine des documents /var/www/www.example.com/web.
Assurez-vous que le système est à jour avant de commencer à installer Munin, exécutez :
apt update
apt upgradeApache est utilisé pour afficher les pages Munin, le module fcgid d’apache est requis pour la fonctionnalité de zoom des graphiques Munin. Installez apache et le module fcgid avec apt.
apt install apache2 libcgi-fast-perl libapache2-mod-fcgidActivez le module fcgid dans apache.
a2enmod fcgid2 Installer et configurer Munin
Pour installer Munin sur Debian, nous faisons ceci :
apt install munin munin-node munin-plugins-extraLorsque le serveur exécute MySQL ou MariaDB, activez quelques plugins Munin supplémentaires pour surveiller MySQL :
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/mysql_ mysql_
ln -s /usr/share/munin/plugins/mysql_bytes mysql_bytes
ln -s /usr/share/munin/plugins/mysql_innodb mysql_innodb
ln -s /usr/share/munin/plugins/mysql_isam_space_ mysql_isam_space_
ln -s /usr/share/munin/plugins/mysql_queries mysql_queries
ln -s /usr/share/munin/plugins/mysql_slowqueries mysql_slowqueries
ln -s /usr/share/munin/plugins/mysql_threads mysql_threadsEnsuite, nous devons éditer le fichier de configuration de Munin /etc/munin/munin.conf. Décommentez les lignes dbdir, htmldir, logdir, rundir et tmpldir (les valeurs par défaut sont correctes). Nous voulons que Munin utilise le nom server1.example.com au lieu de localhost.localdomain dans la sortie HTML, donc nous remplaçons localhost.localdomain par server1.example.com dans la section simple de l’arbre des hôtes. Sans les commentaires, le fichier modifié ressemble à ceci :
nano /etc/munin/munin.conf# Exemple de fichier de configuration pour Munin, généré par 'make build'
# Les trois variables suivantes spécifient où se trouvent les RRD
# bases de données, la sortie HTML, les journaux et les fichiers lock/pid. Ils doivent tous
# être accessibles en écriture par l'utilisateur exécutant munin-cron. Ils sont tous
# par défaut aux valeurs que vous voyez ici.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin
# Où chercher les modèles HTML
#
tmpldir /etc/munin/templates
# Où chercher les fichiers www statiques
#
#staticdir /etc/munin/static
# les fichiers cgi temporaires sont ici. notez qu'ils doivent être accessibles en écriture par
# l'utilisateur cgi (généralement nobody ou httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp
# (Exactement un) répertoire à inclure tous les fichiers.
includedir /etc/munin/munin-conf.d
[...]
# un arbre d'hôtes simple
[server1.example.com]
address 127.0.0.1
use_node_name yes
[...] Nous devrions trouver le fichier de configuration Apache 2.4 pour Munin /etc/munin/apache24.conf - il définit un alias appelé munin vers le répertoire de sortie HTML de Munin /var/cache/munin/www, ce qui signifie que nous pouvons accéder à munin depuis tous les sites web sur ce serveur en utilisant le chemin relatif /munin (par exemple, http://www.example.com/munin).
La configuration apache de Munin n’est pas activée par défaut, cela a été changé de DebianWheezy à Jessie. Le nouveau répertoire de configuration est /etc/apache2/conf-enabled au lieu de /etc/apache2/conf.d qui était utilisé dans les anciennes versions comme Wheezy et Squeeze.
Exécutez ces commandes pour activer et charger la configuration dans apache.
cd /etc/apache2/conf-enabled/
ln -s /etc/munin/apache24.conf munin.conf
service apache2 restartAssurez-vous de commenter la ligne Require local et d’ajouter Require all granted et Options FollowSymLinks SymLinksIfOwnerMatch à la place (sinon, vous ne pourrez accéder à la sortie de Munin que depuis localhost) :
nano /etc/munin/apache24.confAlias /munin /var/cache/munin/www
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
SetHandler fcgid-script
SetHandler cgi-script
Redémarrez Apache :
systemctl restart apache2.servicePuis redémarrez Munin :
systemctl restart munin-node.serviceMaintenant, attendez quelques minutes pour que Munin puisse produire sa première sortie, puis allez sur http://www.example.com/munin/ dans votre navigateur, et vous verrez les premières statistiques :

(Ceci n’est qu’un petit extrait des nombreux graphiques que munin produit…)
3 Protéger par mot de passe le répertoire de sortie de Munin (optionnel mais fortement recommandé)
Il est maintenant judicieux de protéger par mot de passe le répertoire de sortie de munin à moins que vous ne souhaitiez que tout le monde puisse voir chaque petite statistique sur votre serveur.
Pour ce faire, nous devons créer le fichier de mot de passe /etc/munin/munin-htpasswd. Nous voulons nous connecter avec le nom d’utilisateur admin, donc nous faisons ceci :
htpasswd -c /etc/munin/munin-htpasswd adminEntrez un mot de passe pour admin. Ensuite, ouvrez à nouveau /etc/munin/apache24.conf…
nano /etc/munin/apache24.conf… commentez “Require all granted” et ajoutez les lignes que j’ai marquées en rouge :
Alias /munin /var/cache/munin/www
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
Options None
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
SetHandler fcgid-script
SetHandler cgi-script
Puis redémarrez Apache :
systemctl restart apache2.service4 Activer des modules supplémentaires dans Munin
La commande Munin “munin-node-configure –suggest” peut être utilisée pour obtenir des recommandations pour des modules Munin supplémentaires qui peuvent être activés sur le serveur. Exécutez :
munin-node-configure --suggestLa sortie devrait être similaire à ceci :

La colonne “utilisé” montre si un module est activé, la colonne “Suggestions” montre si le serveur exécute un service qui peut être surveillé par ce module. Créez un lien symbolique pour le module dans /etc/munin/plugins pour l’activer.
Ici, je vais activer les modules apache_* par exemple :
cd /etc/munin/plugins
ln -s /usr/share/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volumeRedémarrez Munin pour charger la nouvelle configuration.
systemctl restart munin-node.service5 Installer et configurer Monit
Monit est disponible dans le dépôt backports de Debian Buster. Ce dépôt n’est pas activé par défaut, donc nous devons l’ajouter d’abord. Exécutez cette commande :
echo 'deb http://ftp.de.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.listet ensuite mettez à jour les listes de paquets avec :
apt updatePour installer Monit, nous faisons ceci :
apt install monitMaintenant, 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://mmonit.com/monit/documentation/. Cependant, dans mon cas, je veux surveiller proftpd, sshd, 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 howtoforge, et je veux que Monit envoie des alertes par email à root@localhost, donc mon fichier ressemble à ceci (j’ai ajouté des exemples pour d’autres démons à la configuration afin que vous puissiez ajuster le fichier à vos besoins) :
cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
nano /etc/monit/monitrcset daemon 60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert root@localhost
set httpd port 2812 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow admin:howtoforge
check process sshd with pidfile /var/run/sshd.pid
start program "/usr/sbin/service ssh start"
stop program "/usr/sbin/service ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2/apache2.pid
group www
start program = "/usr/sbin/service apache2 start"
stop program = "/usr/sbin/service apache2 stop"
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
# ---------------------------------------------------------------------------------------------
# REMARQUE : Remplacez example.pid par le nom de pid de votre serveur, le nom dépend du nom d'hôte
# ---------------------------------------------------------------------------------------------
#check process mysql with pidfile /var/lib/mysql/example.pid
# group database
# start program = "/usr/sbin/service mysql start"
# stop program = "/usr/sbin/service mysql stop"
# if failed host 127.0.0.1 port 3306 then restart
# if 5 restarts within 5 cycles then timeout
#check process proftpd with pidfile /var/run/proftpd.pid
# start program = "/usr/sbin/service proftpd start"
# stop program = "/usr/sbin/service proftpd stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process postfix with pidfile /var/spool/postfix/pid/master.pid
# group mail
# start program = "/usr/sbin/service postfix start"
# stop program = "/usr/sbin/service postfix stop"
# if failed port 25 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process nginx with pidfile /var/run/nginx.pid
# start program = "/usr/sbin/service nginx start"
# stop program = "/usr/sbin/service nginx stop"
# if failed host 127.0.0.1 port 80 then restart
#
#check process memcached with pidfile /var/run/memcached.pid
# start program = "/usr/sbin/service memcached start"
# stop program = "/usr/sbin/service memcached stop"
# if failed host 127.0.0.1 port 11211 then restart
#
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid
# start program = "/usr/sbin/service pure-ftpd-mysql start"
# stop program = "/usr/sbin/service pure-ftpd-mysql stop"
# if failed port 21 protocol ftp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process named with pidfile /var/run/named/named.pid
# start program = "/usr/sbin/service bind9 start"
# stop program = "/usr/sbin/service bind9 stop"
# if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
# if failed host 127.0.0.1 port 53 type udp protocol dns then restart
# if 5 restarts within 5 cycles then timeout
#
#check process ntpd with pidfile /var/run/ntpd.pid
# start program = "/usr/sbin/service ntp start"
# stop program = "/usr/sbin/service ntp stop"
# if failed host 127.0.0.1 port 123 type udp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process mailman with pidfile /var/run/mailman/mailman.pid
# group mail
# start program = "/usr/sbin/service mailman start"
# stop program = "/usr/sbin/service mailman stop"
#
#check process amavisd with pidfile /var/run/amavis/amavisd.pid
# group mail
# start program = "/usr/sbin/service amavis start"
# stop program = "/usr/sbin/service amavis stop"
# if failed port 10024 protocol smtp then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap with pidfile /var/run/courier/imapd.pid
# group mail
# start program = "/usr/sbin/service courier-imap start"
# stop program = "/usr/sbin/service courier-imap stop"
# if failed host localhost port 143 type tcp protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-imap-ssl start"
# stop program = "/usr/sbin/service courier-imap-ssl stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid
# group mail
# start program = "/usr/sbin/service courier-pop start"
# stop program = "/usr/sbin/service courier-pop stop"
# if failed host localhost port 110 type tcp protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid
# group mail
# start program = "/usr/sbin/service courier-pop-ssl start"
# stop program = "/usr/sbin/service courier-pop-ssl stop"
# if failed host localhost port 995 type tcpssl sslauto protocol pop then restart
# if 5 restarts within 5 cycles then timeout
#
#check process dovecot with pidfile /var/run/dovecot/master.pid
# group mail
# start program = "/usr/sbin/service dovecot start"
# stop program = "/usr/sbin/service dovecot stop"
# if failed host localhost port 993 type tcpssl sslauto protocol imap 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://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 restartce 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 car le répertoire 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 :
mkdir /var/www/html/monit
echo "hello" > /var/www/html/monit/tokenEnsuite, nous créons le certificat pem (/var/certs/monit.pem) dont nous avons besoin pour l’interface web Monit chiffrée SSL :
mkdir /var/certs
cd /var/certsNous 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
[ req ]
default_bits = 2048
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.pemopenssl dhparam 2048 >> /var/certs/monit.pemopenssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pemchmod 600 /var/certs/monit.pemEnfin, nous pouvons démarrer Monit :
service monit restartMaintenant, pointez 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 howtoforge, et vous devriez voir l’interface web de Monit. Elle devrait ressembler à ceci :

(Écran principal)


(Page d’état SSHd)
Selon votre configuration dans /etc/monit/monitrc, Monit redémarrera vos services s’ils échouent et enverra des emails de notification si les identifiants de processus des services changent, etc.
Pour obtenir le statut de Monit sur le shell, exécutez la commande “monit status” :
monit statusLa commande affichera le statut de tous les services surveillés.

6 Liens
- munin: http://munin-monitoring.org/
- monit: http://mmonit.com/monit/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.