View Sidebar
Il était une fois … le monitoring de nos services

Il était une fois … le monitoring de nos services

29 août 2013 23 h 21 min0 comments

Allez, 6ème (et avant-dernière) partie dédiée au nouveau serveur.

Partie 1 : Présentation de proxmox et de la virtualisation
Partie 2 : Configuration du réseau interne
Partie 3 : Un petit Stress test pour la route
Partie 4 : Quelques optimisations Webserver
Partie 5 : HTTPS et IPV6
Partie 6 : Le Monitoring
Partie 7 : Les Backup

Et oui, je suis de retour … pour vous jouer un mauvais tour.

Ça ne suffit pas les graph de proxmox ou d’ovh ?

C’est bien d’avoir des graphes, mais ce n’est pas ça qui va nous sauver lorsqu’il y aura un problème avec un des softs que l’on utilise.
Aucun logiciel n’est parfait et il arrive assez couramment qu’ils crashs (aucun logiciel n’est épargné).
Qui n’a pas déjà vu un serveur apache en rade où une db qui timeout.

L’idée va donc être de mettre sous surveillance nos différentes machines et leurs processus.
Et lorsqu’un problème est détecté, soit essayer de le corriger (via des restart, reset de config, …), soit envoyer des mails d’alertes pour nous prévenir (attention toutefois à ne pas se spammer).
C’est quand même nettement plus efficace que d’attendre de se rendre compte que ça ne fonctionne plus.

A faire sur tous les serveurs

Pour ca, on va utiliser un soft qui s’appelle monit et qui est fait pour ça :

apt-get install monit

Et on va editer son fichier de config /etc/monit/monitrc

#################################
## Fichier Monit Ganbaranai.fr ##
#################################

# Periode de controle (toutes les minutes avec un start delay de 2 minutes)
set daemon  60
with start delay 120

# Logging (ici on log dans le syslog)
set logfile syslog facility log_daemon

# Configuration des mailing d'alertes
set mailserver smtp.gmail.com port 587 username "[un compte login@gmail.com]" password "[le password du compte]" using tlsv1 with timeout timeout 30 seconds
set mail-format {
        from: webmaster@ganbaranai.fr
        subject: [monit] $SERVICE: $EVENT
}
set alert [votre adresse mail qui recevra les alertes]

# Gestion des queues d'evenements
set eventqueue
        basedir /var/lib/monit/events # set the base directory where events will be stored
        slots 100                     # optionally limit the queue size

# Start Interface Web
set httpd port 2812 and
        use address localhost  # only accept connection from localhost
        allow localhost

# Chargement automatique des check
include /etc/monit/conf.d/*

et un ptit restart

/etc/init.d/monit force-reload

Pour résumer vite fait la configuration que l’on vient de saisir, votre monit va vérifier toutes les 2 minutes que vos différents processus fonctionnent.
Et en cas d’anomalie, il va vous envoyer un mail de notification via Gmail.
Autant dire que vous allez pouvoir déployer ça sur tous vos serveurs.

Mais là il ne surveille rien ?

C’est exactement ça, il va falloir définir pour chaque machine quels processus sont à surveiller et comment.
Pour ça, il suffit de créer un nouveau fichier dans /etc/monit/conf.d/

Voici quelques exemples de scripts à ajouter en fonction des process qui tourne sur la machine :

Vérifier le système

Pour vérifier le système ( /etc/monit/conf.d/system )
check system local
    if loadavg (1min) > 4 then alert
    if loadavg (5min) > 2 then alert
    if memory usage > 75% then alert
    if cpu usage (user) > 70% then alert
    if cpu usage (system) > 30% then alert
    if cpu usage (wait) > 20% then alert

Les Process unix/reseau

Pour Cron ( /etc/monit/conf.d/cron )
check process cron with pidfile /var/run/crond.pid
        group system
        start program = "/etc/init.d/cron start"
        stop  program = "/etc/init.d/cron stop"
        if 5 restarts within 5 cycles then timeout
Pour SSH ( /etc/monit/conf.d/ssh )
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
Pour Fail2Ban ( /etc/monit/conf.d/fail2ban )
check process fail2ban with pidfile /var/run/fail2ban/fail2ban.pid
        start program = "/etc/init.d/fail2ban start"
        stop  program = "/etc/init.d/fail2ban stop"
        if failed unixsocket /var/run/fail2ban/fail2ban.sock then restart
        if 5 restarts within 5 cycles then timeout

Les Serveurs Web

Pour Nginx ( /etc/monit/conf.d/nginx )
check process nginx with pidfile /var/run/nginx.pid group www
        start program = "/etc/init.d/nginx start"
        stop program  = "/etc/init.d/nginx stop"
        if failed host 127.0.0.1 port 80 protocol http
                and request "/nginx_status" then restart
        if cpu > 60% for 2 cycles then alert
        if cpu > 90% for 5 cycles then restart
        if totalmem > 50% 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
Pour Apache ( /etc/monit/conf.d/apache2 )
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 127.0.0.1 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
Pour Lighttpd ( /etc/monit/conf.d/lighttpd )
check process lighttpd with pidfile /var/run/lighttpd.pid group www
        start program = "/etc/init.d/lighttpd start"
        stop program = "/etc/init.d/lighttpd stop"
        if failed host 127.0.0.1 port 80
           protocol http then restart
        if 5 restarts within 5 cycles then timeout
Pour Tomcat ( /etc/monit/conf.d/tomcat )
check process tomcat with pidfile /var/run/tomcat/tomcat.pid group www
    start program = "/etc/init.d/tomcat start"
    stop program = "/etc/init.d/tomcat stop"
    if failed host 127.0.0.1 port 80 then alert
    if failed host 127.0.0.1 port 80 for 5 cycles then restart

Les Bases de données / Cache

Pour Mysql ( /etc/monit/conf.d/mysql )
check process mysql with pidfile /var/run/mysqld/mysqld.pid group database
        start program = "/etc/init.d/mysql start"
        stop program = "/etc/init.d/mysql stop"
        if failed unix "/var/run/mysqld/mysqld.sock" then restart
        if failed host 127.0.0.1 port 3306 then restart
        if 5 restarts within 5 cycles then timeout
Pour Memcached ( /etc/monit/conf.d/memcached )
check process memcached with pidfile /var/run/memcached/memcached.pid group memcached
    start program = "/etc/init.d/memcached start"
    stop program = "/etc/init.d/memcached stop"
    if failed host 127.0.0.1 port 11211 protocol MEMCACHE then restart
    if cpu > 70% for 2 cycles then alert
    if cpu > 90%  for 5 cycles then restart
    if 2 restarts within 3 cycles then timeout
Pour Redis ( /etc/monit/conf.d/redis )
check process redis with pidfile /var/run/redis.pid group redis
    start program = "/etc/init.d/redis-server start"
    stop program = "/etc/init.d/redis-server stop"
    check file dump.rdb with path /var/lib/redis/dump.rdb
    if size > 100 MB then alert

Quoi, c’est vraiment aussi simple que ca ?

Et voilà, il ne vous reste plus qu’à piocher là dedans en fonctions des process que vous utilisez.
Veuillez quand même à faire attention aux group/uid/path déjà utiliser et que ne correspondent pas forcement à la configuration que vous utilisez.
Une fois en place c’est vraiment facile et puissant à utiliser.
La syntaxe est assez simple et il est facile de monitorer ses propres scripts/application de la même façon.

Il est quand même conseillé de tester le fonctionnement en stoppant les process monitorés.
Vous verrez alors assez vite si le process restart et si vous recevez des mails 😛

No Comments

Leave a reply