Tutorial : comment monitorer votre serveur web et relancer ses services automatiquement en cas de problème.


     1


Alaa-eddine

Après quelques années d’expérience dans la gestion de serveurs web, et de nombreuses contraintes rencontrées sur le terrain, j’ai décidé de partagé quelques expériences  sous forme d’articles ou petits tutos, j’avais commencé il y a pas mal de temps avec un petit tuto sur comment mettre en place un CDN gratuit à l’aide de google app Engine, mais faute de temps je n’ai pas pu en faire d’autres.

J’espère que je trouverais le temps pour tenir une cadence d’un tutorial toutes les deux à quatre semaine.

Pour ce deuxième tutorial, j’explique comment mettre en place un système de monitoring pour un serveur web sous linux. Le monitoring doit permettre de surveiller les process, de les redémarrer s’ils s’arrêtent brutalement, ou de les relancer s’ils deviennent instables.

Mon besoins initial pour un tel service est survenu suite à la montée brutale de trafic sur un serveur  qui n’était pas dimensionné pour. Sur ce serveur, apache suffoquait pour manque de RAM, le serveur se mettait à swapper, et les visiteurs voyaient des pages avec des erreurs 503 (ouie c’est moche pour le visiteur et pour le référencement). La solution que j’avais en attendant de migrer vers un autre serveur était de relancer apache, et tout rentrait dans l’ordre … pendant quelque temps …. Puis il fallait redémarrer. Le problème se produisait uniquement en heure de forte fréquentation (heureusement).

J’ai donc cherché plusieurs solutions pour enfin tomber sur Monit.

Qu’est ce que monit

Monit est un outil open source qui permet de surveiller des processus, des fichiers, des dossiers et de faire des actions suivant les conditions que l’on souhaite. Il est configurable via un langage de scripting assez simple et permet de répondre à quasiment tous les besoins du monitoring s’il est bien configuré.

(vous remarquerez que l’into de cet article est longue mais c’est normal car la mise en place de Monit va aller très très vite 😉 ).

Installer monit

Tout d’abord l’installation de monit, ce dernier est disponible dans les repositories standards de la plupart des distribution, si vous avez une debian ou une ubuntu comme moi tapez

Apt-get install monit.

A ce stade votre monitoring est déjà opérationnel 🙂 mais il faut le « tuner » un peu. Pour cela ouvrez le fichier /etc/monit/monitrc avec votre éditeur favoris et parcourez ce dernier pour vous rendre compte à quel point la logique de configuration de cet outil est simple, en plus ce fichier de conf est assez bien documenté.

La plupart des admin système moyen ou avertis arriveront à mettre en place très rapidement une conf sans lire la suite, pour les autres, je vais prendre un cas concret et configurer monit en fonction.

 

Configurer monit

Tout d’abord il faut savoir que monit fait des cycles de vérification chaque n seconde, cette valeur est à ajustée en fonction de votre configuration ou à la sensibilité de vos services.

Pour faire simple on va demander à monit de faire un cycle par minute

Dans le fichier de conf (vers la ligne 20) modifier la valeur en

Set daemon 60

 

Ensuite vous pouvez si vous le souhaitez activer ou désactiver les logs, ici laissez la ligne par défaut pour logger les messages monit dans le syslog

set logfile syslog facility log_daemon

Ensuite on configure le serveur de messagerie et l’email sur lequel on reçoit les messages. En général vous disposez déjà d’un serveur de messagerie sur votre serveur web.

Ici je déclare donc localhost comme serveur de messagerie, et je veux que mes emails aient pour émetteur monitoring@emaroc.tld et que le récepteur soit  sysadmin@emaroc.tld

set mailserver localhost
set mail-format { From: monitoring@emaroc.tld }
set alert sysadmin@emaroc.tld

monit a un format d’email par défaut, que vous pouvez personnaliser ; utile si vous mettez en place ce service pour un client par exemple, si c’est le cas documentez-vous sur mail-format … (bein oui je ne vais pas vous mâcher tout le travail :p )

 

Maintenant commençons le monitoring plus concrètement

Je souhaite qu’il me prévienne également si la RAM consommée et supérieur à 90%.

Je souhaite aussi qu’il me prévienne si la charge moyenne du serveur (load average) et supérieur à 3 durant plus de 4 minutes.

check system localhost
if memory usage > 90% then alert
if loadavg (4min) > 3 then alert

 

Bien entendu d’autres configurations sont possible (surveillance de la charge CPU système, utilisateur …etc)

et enfin, on va surveiller notre serveur apache, c’est là que ça devient plus amusant 😀

Notez que si comme moi vous utilisez une distrib ubuntu avec apache2, il faut modifier la configuration proposée par monit pour pointer vers le bon pid apache.

Pour notre configuration, nous allons demander à monit de surveiller apache et de le relancer s’il s’arrête.

Nous allons aussi lui demander de nous alerter par email si la quantité de RAM consommée dépasse 3.5Go durant 3 minutes.

et de relancer apache si la quantité de RAM consommée dépasse 3.8Go durant 5 minutes

et de relancer apache si le CPU utilisé 80%  durant 5 minutes.

(rappelez-vous que nous avons défini des cycles d’une minute 1 cycle = 1 minute)

check process apache2 with pidfile /var/run/apache2.pid
  start program = "/etc/init.d/apache2 start'"
  stop program  = "/etc/init.d/apache2 stop'"
  if cpu > 80% for 5 cycles then restart
  if totalmem > 3500.0 MB for 3 cycles then alert
  if totalmem > 3800.0 MB for 5 cycles then alert
  group server

 

notez que vous pouvez aller beaucoup plus loin dans la configuration, par exemple demander à monit de checker le contenu d’un page html ou php et d’effectuer une action en fonction de la réponse, de surveiller les ports ouverts (notamment pour le SSL par exemple) …etc

Lancement du demon monit et test

Sauvegardez votre fichier monitrc puis relancer le service /etc/init.d/monit restart.

Déjà là vous devez recevoir un mail vous indiquant que monit est lancé.

Si c’est le cas, vous pouvez alors faire un test simple, arrêtez apache via la commande /etc/init.d/apache2 stop. Normalement au prochain cylce monit va le relancer automatiquement (une minute max avec notre config) et va vous prévenir par email que l’instance apache à changée.

En cas de problème et pour débugger tapez la ligne de commande

grep –Iin ‘monit’ /var/log/syslog

pour voir ce qui cloche avec monit 😉

notez que ceci n’est qu’une infime partie de ce que permet monit, pour aller plus loin documentez vous 😉 http://mmonit.com/monit/documentation/

 

Dans le prochain tutorial j’expliquerais comment j’ai pu multiplié par quatre la capacité d’un serveur web sans upgrade matériel, et comment j’ai pu accélérer les temps de réponse de ce dernier par la même occasion. Et je ne dirais rien de plus …



 

A lire également

 
  • ombrageux

    article intéressant!

    Mais ce qui m’intéressait le plus c’était ca :

    Dans le prochain tutorial j’expliquerais comment j’ai pu multiplié par quatre la capacité d’un serveur web sans upgrade matériel, et comment j’ai pu accélérer les temps de réponse de ce dernier par la même occasion.

    Mais toujours pas de tuto.. Dommage