Apportez votre aide…
Monit : Alerter et Réagir en cas de panne
Présentation
monit est un outil de surveillance de services locaux. Il vérifie la disponibilité des *daemons* présents sur le serveur qui l'accueille. En cas de panne, monit peut alerter l'administrateur du système.
monit peut comme d'autres solutions similaires (Zabbix, Nagios) déclencher des actions pour tenter de rétablir un service interrompu, comme par exemple relancer un serveur Apache si il ne répond plus ou vider la file d'attente d'un serveur Postfix en cas d'engorgement.
monit est un logiciel à la fois simple et puissant. À utiliser avec précautions !
Quelques infos :
- Licence : GPL
- Site officiel : http://www.tildeslash.com/monit/
Une solution de gestion distribuée de monit, appelée m/monit permet de superviser à distance de multiples instances monit, c'est-à-dire les administrer et centraliser des informations historiques et statistiques envoyées par chaque instance monit gérée.
Installation
L'installation est très simple :
$ apt-get install monit
Le paquet se trouve dans le dépôt Universe
Configuration
Dans premier temps, il convient d'éditer la configuration pour définir les paramètres généraux du démon monit. La configuration des services surveillés sera abordée dans la partie suivante.
Éditer le fichier /etc/monit/monitrc. afin d'obtenir les options suivantes :
set daemon 60 set logfile syslog facility log_daemon set mailserver localhost set mail-format { from: monit@serveurdev.example.com } set alert root@localhost set httpd port 2812 and SSL ENABLE PEMFILE /var/certs/monit.pem allow admin:test
L'instruction set daemon permet de définir la durée d'un "cycle" monit. Un cycle correspond à l'intervalle (en secondes) entre deux vérifications.
Cette configuration active le serveur web (https) de monit sur le port 2812. L'utilisateur est admin et son mot de passe est test. Les messages d'alertes sont envoyés à root@localhost.
Le fichier de configuration est très clair et il est relativement simple de modifier le comportement du *daemon* de surveillance.
Il faut ensuite engendrer un certificat SSL. Tout d'abord créer le répertoire qui accueillera le certificat :
$ mkdir /var/certs $ cd /var/certs
Puis définir les options du certificat :
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 = Ile de France stateOrProvinceName_default = Monitoria localityName = Paris localityName_default = Monittown organizationName = the_company organizationName_default = Monit Inc. organizationalUnitName = Organizational Unit Name organizationalUnitName_default = Dept. of Monitoring Technologies commonName = Common Name (FQDN of your server) commonName_default = server.monit.mo emailAddress = Email Address emailAddress_default = root@monit.mo [ cert_type ] nsCertType = server
Puis procéder à la génération du certificat :
$ 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
Dans un environnement de développement, la sécurisation par SSL peut ne pas être nécessaire, on peut donc avantageusement remplacer la procédure ci-dessus par les lignes :
set httpd port 2812 and allow admin:monit
L'étape suivante consiste à activer le *daemon* par défaut et définir la fréquence de surveillance (ici : 60 secondes). Pour cela on édite le fichier /etc/default/monit :
startup=1 CHECK_INTERVALS=60
Il ne reste plus qu'à démarrer monit :
$ /etc/init.d/monit start
Vérifier que le *daemon* est activé, en se connectant à l'adresse : ::
http://serveurdev.exemple.fr:2812/
Utilisation
Pour surveiller un service donné, il suffit d'éditer le fichier monitrc et de spécifier :
- le fichier PID du service,
- les commandes de démarrage et d'arrêt du service,
- l'utilisateur système du service,
- la condition de test à effectuer,
- le(s) commande(s) à effectuer lorsque le test est positif.
Par exemple, voici comment redémarrer automatiquement le serveur SSH s'il ne répond plus : ::
check process sshd with pidfile /var/run/sshd.pid start program "/etc/init.d/ssh start" stop program "/etc/init.d/ssh stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
La dernière ligne permet d'éviter des boucles infinies, notamment si la configuration du serveur SSH est erronée.
Bien sûr il est possible de configurer des traitements d'erreurs plus fins. Voici par exemple, une politique de surveillance d'Apache : ::
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 www.example.com 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
Dans cet exemple, monit vérifiera la présence d'un fichier monit/token sur le serveur. En cas d'absence le serveur sera redémarré.
On note également qu'une alerte par courriel sera envoyé dès qu'Apache utilisera plus de 60% des capacités du ou des processeurs.
Pour aller plus loin
- Quelques exemples de configurations avancées : https://mmonit.com/wiki/Monit/ConfigurationExamples
- Documentation : https://mmonit.com/monit/documentation/monit.html
- Plusieurs tutoriels sur la configuration de Monit : http://www.it-connect.fr/tutoriels/securite/supervision/monit/