{{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/