Dans cet article, je décris comment vous pouvez surveiller votre serveur Debian 10 (Buster) avec Munin et Monit. Munin génère de petits graphiques astucieux sur presque tous les aspects de votre serveur (moyenne de charge, utilisation de la mémoire, utilisation du processeur, débit MySQL, trafic réseau, etc.) sans trop de configuration, tandis que Monit vérifie la disponibilité de services comme Apache, MySQL, Postfix et prend l'action appropriée comme un redémarrage s'il constate qu'un service ne se comporte pas comme prévu. La combinaison des deux vous donne une surveillance complète :des graphiques qui vous permettent de voir les problèmes actuels ou imminents (par exemple, "Nous avons besoin d'un serveur plus gros bientôt, notre charge moyenne augmente rapidement."), et un chien de garde qui assure 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 des modifications mineures.
1 Remarque préliminaire
Toutes les commandes de ce didacticiel 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 la racine du document /var/www/www.example.com/web.
Assurez-vous que le système est à jour avant de commencer à installer Munin, exécutez :
apt update
apt upgrade
Apache est utilisé pour afficher les pages Munin, le module apache fcgid est requis pour la fonction de zoom du graphique Munin. Installez apache et le module fcgid avec apt.
apt install apache2 libcgi-fast-perl libapache2-mod-fcgid
Activez le module fcgid dans apache.
a2enmod fcgid
2 Installer et configurer Munin
Pour installer Munin sur Debian, nous procédons comme suit :
apt install munin munin-node munin-plugins-extra
Lorsque le serveur exécute MySQL ou MariaDB, activez les 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_threads
Ensuite, nous devons éditer le fichier de configuration Munin /etc/munin/munin.conf. Décommentez les lignes dbdir, htmldir, logdir, rundir et tmpldir (les valeurs par défaut conviennent). 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'arborescence des hôtes. Sans les commentaires, le fichier modifié ressemble à ceci :
nano /etc/munin/munin.conf
# Example configuration file for Munin, generated by 'make build'
# The next three variables specifies where the location of the RRD
# databases, the HTML output, logs and the lock/pid files. They all
# must be writable by the user running munin-cron. They are all
# defaulted to the values you see here.
#
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin
# Where to look for the HTML templates
#
tmpldir /etc/munin/templates
# Where to look for the static www files
#
#staticdir /etc/munin/static
# temporary cgi files are here. note that it has to be writable by
# the cgi user (usually nobody or httpd).
#
# cgitmpdir /var/lib/munin/cgi-tmp # (Exactly one) directory to include all files from. includedir /etc/munin/munin-conf.d [...] # a simple host tree
[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 dans le répertoire de sortie HTML de Munin /var/cache/munin/www, ce qui signifie que nous pouvons accéder à munin à partir de tous les sites Web de ce serveur. en utilisant le chemin relatif /munin (par exemple http://www.example.com/munin).
La configuration apache 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 restart
Assurez-vous de commenter la ligne Require local et ajoutez Require all granted et Options FollowSymLinks SymLinksIfOwnerMatch à la place (sinon vous ne pourrez accéder à la sortie Munin qu'à partir de localhost) :
nano /etc/munin/apache24.conf
Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
</Directory>
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
# Require local
Require all granted
Options FollowSymLinks SymLinksIfOwnerMatch
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>
Redémarrez Apache :
systemctl restart apache2.service
Redémarrez ensuite Munin :
systemctl restart munin-node.service
Attendez maintenant 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 Munin (facultatif mais fortement recommandé)
Maintenant, c'est une bonne idée de protéger par mot de passe le répertoire de sortie munin à moins que vous ne vouliez que tout le monde puisse voir toutes les petites statistiques sur votre serveur.
Pour ce faire, nous devons créer le fichier de mots de passe /etc/munin/munin-htpasswd. Nous voulons nous connecter avec le nom d'utilisateur admin, nous faisons donc ceci :
htpasswd -c /etc/munin/munin-htpasswd admin
Saisissez un mot de passe pour l'administrateur. Puis ouvrez à nouveau /etc/munin/apache24.conf ...
nano /etc/munin/apache24.conf
... commentez "Exigez tous accordés et ajoutez les lignes que j'ai marquées en rouge :
Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
Options None
</Directory>
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
# Require local
# Require all granted
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Basic
Require valid-user
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</Location>
Redémarrez ensuite Apache :
systemctl restart apache2.service
4 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écuter :
munin-node-configure --suggest
Le résultat devrait ressembler à ceci :
La colonne "utilisé" indique si un module est activé, la colonne "Suggestions" indique 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_volume
Redémarrez Munin pour charger la nouvelle configuration.
systemctl restart munin-node.service
5 Installer et configurer Monit
Monit est disponible à partir du référentiel de backports Debian Buster. Ce référentiel n'est pas activé par défaut, nous devons donc l'ajouter en premier. Exécutez cette commande :
echo 'deb http://ftp.de.debian.org/debian buster-backports main' > /etc/apt/sources.list.d/buster-backports.list
puis mettez à jour les listes de packages avec :
apt update
Pour installer Monit, nous procédons comme suit :
apt install monit
Maintenant, nous devons éditer /etc/monit/monitrc. Le fichier /etc/monit/monitrc par défaut contient de nombreux exemples et vous pouvez trouver d'autres 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 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 e-mail à [email protected], 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/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: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
# ---------------------------------------------------------------------------------------------
# NOTE: Replace example.pid with the pid name of your server, the name depends on the hostname
# ---------------------------------------------------------------------------------------------
#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 timeout
Le fichier de configuration est assez explicite; si vous n'êtes pas sûr d'une option, consultez 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 car la racine du document de notre site Web est /var/www/html. Si Monit ne réussit pas, cela signifie qu'Apache n'est pas en cours d'exécution et que Monit va le redémarrer. Nous devons maintenant 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/token
Ensuite, nous créons le certificat 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. Cela peut ressembler à ceci :
nano /var/certs/monit.cnf
# create RSA certs - Server [ 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 = 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 dhparam 2048 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem
Enfin, nous pouvons démarrer Monit :
service monit restart
Pointez maintenant votre navigateur sur 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 Monit. Cela devrait ressembler à ceci :
(Écran principal)
(Page d'état SSHd)
En fonction de votre configuration dans /etc/monit/monitrc, monit redémarrera vos services en cas d'échec et enverra des e-mails de notification si les ID de processus des services changent, etc.
Pour obtenir le statut de Monit sur le shell, exécutez la commande "monit status" :
monit status
La commande affichera l'état de tous les services surveillés.
6 liens
- munin :http://munin-monitoring.org/
- moniteur :http://mmonit.com/monit/