Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
monit [Le 18/05/2008, 17:11] 90.17.203.156, 213.95.41.13monit [Le 14/01/2020, 06:55] (Version actuelle) – [Présentation] Actualisation du paragraphe sur m/monit qui datait de 2007. 78.251.109.36
Ligne 1: Ligne 1:
 +{{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.
 +
 +La particularité de //monit// par rapport à d'autres solutions similaires
 +(//Zabbix//, //Nagios//) réside dans le fait qu'il est capable de
 +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.
 +
 +<note>Note d'un adminsys qui passe par là : Zabbix et Nagios savent aussi déclencher des actions avant d'envoyer des alertes. Ceci n'est pas une spcificité de Monit.
 +
 +--- //[[:utilisateurs:tiramiseb|tiramiseb]] Le 12/04/2014, 14:25//</note>
 +
 +//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 :
 +<file>
 + 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
 +</file>
 +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
 +<file>
 +   # 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
 +</file>
 +Puis procéder à la génération du certificat :
 +<code>
 +   $ 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
 +</code>
 +
 +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 :
 +<code>
 +   set httpd port 2812 and
 +   allow admin:monit
 +</code>
 +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// :
 +<file>
 +   startup=1
 +   CHECK_INTERVALS=60
 +</file>
 +Il ne reste plus qu'à démarrer //monit// :
 +<code>
 +   $ /etc/init.d/monit start
 +</code>
 +Vérifier que le *daemon* est activé, en se connectant à l'adresse : ::
 +<code>
 +   http://serveurdev.exemple.fr:2812/
 +</code>
 +
 +
 +===== 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 : ::
 +<file>
 +     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
 +</file>
 +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// : ::
 +<file>
 +      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
 +</file>
 +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 : http://mmonit.com/wiki/Monit/ConfigurationExamples
 +  * Documentation : http://mmonit.com/monit/documentation/monit.html
 +  * Plusieurs tutoriels sur la configuration de Monit : http://www.it-connect.fr/tutoriels/securite/supervision/monit/
 +
 +
 +