{{tag>administration systeme serveur vétuste}} ====== 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/