Menu toggle

Un court article cette semaine pour vous présenter Monit, un outil de monitoring de votre serveur. Je l’utilise au quotidien sur mes serveurs perso et il faut dire qu’il fait très bien le boulot. Il est capable de monitorer des services, le système (ram, CPU…), les disques (présence/absence, espace disponible…). Il est aussi capable de lancer des scripts ce qui permet de lui faire monitorer presque n’importe quoi. La configuration est très lisible (mais pas très simple à écrire), il propose par défaut une interface d’admin permettant de surveiller les éléments monitorés et de les arrêter/relancer.

Exemple d'interface de Monit

Quelques exemples de configurations

Un check basique

Un petit check sur un process : si le process identifié par le PID est mort, il est automatiquement relancé.

check process apache with pidfile /var/run/httpd.pid
    restart program  = "/etc/init.d/apache2 restart"
    if failed port 80 protocol http then restart

Gestion complète d’un processus

Il est bien sur possible de rendre le comportement un peu plus intelligent en attendant un certain nombre d’échecs avant de relancer le processus. Le fait d’ajouter aussi les commandes de lancement et d’arrêt permettra de piloter simplement le process à travers l’interface de Monit.

check process apache with pidfile /var/run/httpd.pid
    start program = "/etc/init.d/apache2 start"
    stop  program = "/etc/init.d/apache2 stop"
    restart program  = "/etc/init.d/apache2 restart"
    if failed port 80 protocol http for 2 cycles then restart

Les alertes

Il est même possible de monitorer le comportement du processus et de lancer des alertes.

check process apache with pidfile /var/run/httpd.pid
    [...]
    if cpu > 95% for 2 cycles then alert
    if memory > 50 MB then alert
    if total memory > 500 MB then restart

Le mécanisme d’alerte est configurable, pour moi c’est un simple mail qui m’est envoyé.

Surveillance des disques, fichiers et répertoires

check filesystem disk2 with path /dev/disk2
    if space usage > 95% then alert
                 
check file apache with path /usr/sbin/httpd
    if failed checksum then alert 
    if failed uid root then alert
    if failed gid root then alert
    if failed permission 755 then alert
    
check directory incomming with path /var/data/ftp
    if timestamp > 1 hour then alert

Le couteau suisse, le script perso

check program salesreport with path /var/monit/programs/sales.sh
    every "* 8-9 * * 1-5"
    if status != 0 then alert

Documentation

C’est un aperçu assez rapide de Monit, plongez-vous dans la documentation qui même si elle n’est pas très jolie permet de réaliser plein de check utiles.

Tous les exemples sont tirés de la présentation officielle de Monit.