Dans cet article, je vais décrire comment vous pouvez surveiller votre serveur CentOS 7 avec Munin et Monit. Munin produit 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 eth0, etc.) sans trop de configuration, tandis que Monit vérifie la disponibilité de services comme Apache, MySQL, Postfix et prend l'action appropriée telle qu'un redémarrage s'il détecte qu'un service ne se comporte 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 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 Munin vous permette de surveiller plus d'un serveur, nous ne discuterons ici que de la surveillance du système sur lequel il est installé.
Ce didacticiel a été écrit pour CentOS 7, mais la configuration devrait également s'appliquer à d'autres distributions telles que RHEL et Scientific Linux.
1 Remarque préliminaire
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/html.
2 Activer le référentiel EPEL
Sur CentOS 7, Munin et Monit ne sont pas disponibles dans les référentiels CentOS par défaut. Heureusement, nous pouvons les installer à partir du référentiel EPEL. Pour activer le référentiel EPEL, nous exécutons :
yum install epel-release
Importez la clé GPG EPEL :
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
puis lancez :
yum update
pour s'assurer que le système est à jour et que la liste des paquets d'EPEL est chargée avant de commencer à installer munin.
2 Installer le serveur Web Apache
Munin nécessite un serveur Web pour servir et afficher ses fichiers de statistiques. Je vais installer le serveur apache httpd ici :
yum install httpd
Démarrez apache et activez-le pour qu'il soit lancé automatiquement au démarrage.
systemctl enable httpd
systemctl start httpd
4 Installer et configurer Munin
Pour installer Munin sur CentOS 7, nous procédons comme suit :
yum install munin munin-node
Ensuite, nous créons les liens de démarrage du système pour Munin et le démarrons :
systemctl enable munin-node
systemctl start munin-node
Ensuite, nous devons éditer le fichier de configuration de Munin /etc/munin/munin.conf.
nano /etc/munin/munin.conf
Nous voulons que munin utilise le nom server1.example.com au lieu de localhost dans la sortie HTML, nous remplaçons donc localhost par server1.example.com. Sans les commentaires, le fichier modifié ressemble à ceci :
[...] # a simple host tree [server1.example.com] address 127.0.0.1 use_node_name yes [...]
Les statistiques munin sont protégées par un nom d'utilisateur et un mot de passe (Apache basic auth). À l'étape suivante, nous ajoutons un nouvel utilisateur et un nouveau mot de passe au fichier /etc/munin/munin-htpasswd.
htpassd /etc/munin/munin-htpasswd admin
La commande ajoutera un nouvel utilisateur avec le nom "admin" et demandera deux fois le nouveau mot de passe.
Attendez maintenant quelques minutes pour que munin puisse produire sa première sortie, puis allez sur http://server1.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...)
5 Installer et configurer Monit
Ensuite, nous allons installer Monit :
yum install monit
Ensuite, nous créons les liens de démarrage du 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 des exemples de configuration (vous pouvez trouver plus d'exemples de configuration sur http://mmonit.com/wiki/Monit/ConfigurationExamples) qui sont tous commentés, mais il indique également à monit regardez dans le répertoire /etc/monit.d pour les fichiers de configuration.
Dans ce cas, je veux surveiller :
- proftpd
- sshd
- mysql
- apache
- suffixe
De plus, je vais configurer ces paramètres pour Monit :
- Activer l'interface Web Monit sur le port 2812.
- Utilisez HTTPS pour l'interface Web au lieu de HTTP.
- Configurer une connexion protégée par mot de passe pour l'interface Web.
- Monit enverra des alertes par e-mail à [email protected]
Je vais d'abord configurer les paramètres d'authentification. Ouvrez le fichier /etc/monit.d/monitrc
nano /etc/monit.d/monitrc
Et faites défiler vers le bas jusqu'à ce que vous trouviez cette section :
set httpd port 2812 and
use address localhost # only accept connection from localhost
allow localhost # allow localhost to connect to the server and
allow admin:monit # require user 'admin' with password 'monit'
allow @monit # allow users of group 'monit' to connect (rw)
allow @users readonly # allow users of group 'users' to connect readonly
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 pouvez également changer le nom d'utilisateur "admin" en un nom qui ne peut pas être deviné facilement.
Nous ajoutons maintenant la configuration des 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
# Send emails trough this mailserver
set mailserver localhost
# Set the From address of the alert emails
set mail-format { from: [email protected] }
# Send alerts to this address
set alert [email protected]
# Monitor the Proftpd service 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
# Monitor the SSH service 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
# Monitor MySQL check process mysql with pidfile /var/run/mysqld/mysqld.pid group database start program = "/usr/bin/systemctl start mysqld" stop program = "/usr/bin/systemctl stop mysqld" if failed host 127.0.0.1 port 3306 then restart if 5 restarts within 5 cycles then timeout
# Monitor the apache webserver 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
# Monitor postfix mailserver 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 ne vérifiez que les processus qui existent réellement sur votre serveur - sinon monit ne démarrera pas. Par exemple, 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, 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 :
touch /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 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
Enfin, nous pouvons lancer la surveillance :
systemctl restart monit
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 testez, et vous devriez voir l'interface Web Monit. Cela devrait ressembler à ceci :
(Écran principal)
(Page d'état d'Apache)
En fonction de votre configuration dans /etc/monit.d/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.
6 liens
- munin :http://munin.projects.linpro.no
- moniteur :http://mmonit.com/monit
- CentOS :http://www.centos.org