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
Ç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
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 😛
at 1 h 38 min
[…] Il était une fois … le monitoring de nos services […]