====== Monit ====== Monit est un service de monitoring qui vérifie que certaines conditions sont remplies (tel fichier a tel checksum, tels droits, tel service tourne, tel requete tcp/ip renvoie tel truc, etc) et lance des actions sinon (redémarrer, mail d'alerte). Dans squeeze, c'est la 5.1 qui est dispo, mais elle marche pas dans un container openvz (pb de lecture des infos de ram, pas grave mais 2 lignes d'erreur par check), mais c'est assez simple de récupérer la 5.4 (un binaire et une page de man). ===== Syntaxe ===== On va se créer un fichier /etc/monit/serviceTruc par service à surveiller. La syntaxe est assez simples, avec les deux seules entrées * ''set itemAConfigurer'' * ''check serviceASurveiller'' Pour un process vaut mieux un pidfile, mais on peut préciser une regex, pour un fichier le chemin. Ensuite, faut commencer avec les exemples fournis sur http://mmonit.com/wiki/Monit/ConfigurationExamples La page de [[http://mmonit.com/monit/documentation/monit.html|man]] est très complète. On peut tester certaines choses gourmandes de temps en temps seulement (ou sauf sur certaines tranches horaires où c'est "normal" de sortir des clous), avec ''every'' check process toto matching /usr/local/bin/toto # prend le 1er process qui satisfait la regex every 2 cycles ... check process mysqld with pidfile /var/run/mysqld.pid not every "* 0-3 * * 0" # on vérifie pas entre minuit et trois heures du mat le dimanche Il connait les protocoles : APACHE-STATUS DNS DWP FTP GPS HTTP IMAP CLAMAV LDAP2 LDAP3 LMTP MEMCACHE MYSQL NNTP NTP3 POP POSTFIX-POLICY RADIUS RDATE RSYNC SIP SMTP SSH TNS PGSQL, ce qui permet de faire par ex du Ça permet de faire du if failed host 192.168.1.100 port 8080 protocol http and request '/testing' hostheader 'example.com' with timeout 20 seconds for 2 cycles then alert if failed port 80 protocol http and request "/page.html" with checksum 8f7f419955cefa0b33a2ba316cba3659 then alert if failed unixsocket /var/run/php5-fpm/mypool.socket ... if failed (url http://myhost.tld/check and content == 'OK') then alert En théorie on peut faire du if failed host sqlhost port 3306 protocol mysql send "string de connexion + select" expect "résultat attendu" then alert mais la chaîne de connexion est un peu compliquée à élaborer, autant avoir un script externe qui utilise le binaire mysql et filtre avec awk pour répondre OK (par exemple). check program toto with path "/root/toto.sh" if status != 0 then alert et dans toto.sh on met par ex (stderr sera dans le mail d'alerte) # ... params # la requete doit renvoyer 1 nb=$(mysql $MYSQL_OPTS -e "$QUERY") if [ "$nb" != "1" ] then echo "Avec mysql $MYSQL_OPTS -e '$QUERY' >&2 echo "On a pas récupéré '1' mais $nb" >&2 exit 1 fi exit 0