Surveiller son serveur dédié facilement avec Monit

Publié le 16 avril 2015 Note : Temps de lecture : 8 min.

J’ai décidé de commencer une nouvelle petite série d’article suite à la prise en main d’un serveur dédié comme un VPS ou Kimsufi. Ces articles ont tout d’abord pour objectif de partager mon expérience avec vous mais également de me servir de mon blog comme un petit bloc notes. En effet, c’est toujours très pratique de reprendre un ancien article pour retrouver la configuration d’un paquet. On commence aujourd’hui, la présentation de Monit !

Présentation

Je ne l’ai pas fait au début, mais pourtant Monit est vraiment le paquet à installer dès que vous configurez votre serveur. Son rôle est très simple, il va surveiller qu’une liste de processus définis tournent bien sur le serveur. Si ce n’est pas le cas, il va vous avertir par mail et essayer de les relancer automatiquement.

Concrètement, si votre processus MySQL plante pour une raison inconnue, il vous avertit et le relance tout seul. C’est quand même parfait non ? Voici à quoi ressemble l’interface, il faut reconnaitre qu’elle est assez simple mais elle fait le boulot. Si tout est au vert, pas d’inquiétude, si vous voyez du rouge, c’est le moment de vous connecter en SSH !

Vous venez choisir ensuite vous même les paquets que vous souhaitez surveiller. J’ai choisi pour ma part de contrôler Apache, MySQL, Sendmail et Vsftpd pour la partie serveur web. J’ai ensuite ajouté SSH, Cron, Fail2ban et Webmin pour le fonctionnement global du serveur. Passons maintenant à la partie installation et configuration du paquet.

Installation et configuration

Comme pour chaque paquet sous Debian, il suffit de vous connecter en root sur le serveur et de taper la commande suivante. Pour le moment, rien de compliqué !

apt-get install monit

Une fois que le paquet est installé correctement, nous allons créer un fichier de configuration pour paramétrer Monit en fonction de nos besoins. Nous allons donc créer le fichier au bon endroit avec la commande suivante.

nano /etc/monit/conf.d/maconfiguration

Maintenant que votre fichier est ouvert avec nano (vous pouvez utiliser vi ou emacs si vous préférez), copier-coller le contenu ci-dessous dans le haut de votre fichier. Cela va nous permettre de définir la durée à laquelle vous rafraichissez Monit, j’ai choisi 60 secondes pour ma part. Vous devez ensuite définir l’adresse mail à laquelle vous souhaitez recevoir les rapports et le port et le login/mot de passe pour accéder à l’interface.

##### Réglages de base de Monit #####
set daemon  60
set mailserver localhost
set mail-format { 
  subject: [Monit] $SERVICE - $EVENT
}
set alert email@domaine.com
set httpd port 1212 and allow utilisateur:motdepasse    

Je vous conseille bien évidemment de changer de le port par celui que vous voulez et de changer également le nom d’utilisateur et le mot de passe. Attention, je crois que les caractères spéciaux passent mal…

Choix des services

Nous allons maintenant venir ajouter à la suite de notre fichier les services que l’on souhaite surveiller au quotidien. On commence donc par ajouter les services de base pour un bon petit serveur web : Apache2 et MySQL dans mon cas.

# Apache2
check process apache with pidfile /var/run/apache2.pid
group apache
start program = "/etc/init.d/apache2 start"
stop program = "/etc/init.d/apache2 stop"
if failed host www.nomdedomaine.fr port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
if cpu > 80% for 2 cycles then alert
if cpu > 90% for 5 cycles then restart
if children > 250 then restart
 
# MySQL
check process mysqld 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 host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout

Il faut savoir que pour chaque service, vous allez devoir adapter le chemin où se situe votre processus. Si vous partez sur un Debian, vous devrez être proche de la config ci-dessus mais pour le modifier il faut changer le chemin de la ligne où il y a « check process ». Enfin pour Apache2, il faut aussi changer l’URL avec votre nom de domaine.

On continue maintenant avec quelques services liés au système en lui même. Je surveille donc le processus SSH, qui est quand même très utile pour se connecter, le processus Cron, essentiel pour que mes sauvegardes se déroulent sans encombres et aussi Fail2ban pour la sécurité !

# SSH
check process sshd with pidfile /var/run/sshd.pid
group ssh
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed host 127.0.0.1 port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
  
# 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

# 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

Vous n’avez rien à changer ici si ce n’est le port SSH dans le cas où vous avez mis un port personnalisé. Ce que je vous conseille fortement au passage ! Très pratique pour éviter les connexions malveillantes.

On termine avec quelques petits processus personnel, c’est à dire Webmin, pour gérer mon serveur à distance avec une interface, Sendmail, pour l’envoi des mails et Vsftpd pour le protocole FTP.

# Sendmail
check process sendmail with pidfile /var/run/sendmail/mta/sendmail.pid
group mail
start program = "/etc/init.d/sendmail start"
stop  program = "/etc/init.d/sendmail stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout

# Vsftpd
check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
start program = "/etc/init.d/vsftpd start"
stop program  = "/etc/init.d/vsftpd stop"
if failed port 21 protocol ftp then restart
if 5 restarts within 5 cycles then timeout

# Webmin
check process webmin with pidfile /var/webmin/miniserv.pid
group webmin
start program = "/etc/init.d/webmin start"
stop  program = "/etc/init.d/webmin stop"
if failed host 127.0.0.1 port 10000 then restart
if 5 restarts within 5 cycles then timeout

Bien sur, vous devrez adapter les quelques lignes ci-dessus avec les bons ports notamment pour le FTP et Webmin si vous les avez changé.

Côté services, il se peut que les miens ne vous suffisent pas. En effet, chacun à sa configuration un peu personnalisée. Vous pouvez par exemple choisir d’utiliser NginX à la place de Apache2 ou encore Postfix à la place de Sendmail.

Vous trouverez donc sur ce site de nombreux exemples avec plusieurs processus. Idéal pour adapter ce tutoriel en fonction de votre configuration. Il ne vous reste plus qu’à enregistrer votre fichier, vérifiez votre syntax et lancer Monit avec les commandes ci-dessous.

/etc/init.d/monit syntax
/etc/init.d/monit start

Pour accéder à l’interface, voici l’adresse à utiliser : http://votreadresseip:port/

Surveillez votre hardware

Vous n’avez pas seulement la possibilité de surveiller des services pour s’assurer que tout tourne correctement. Vous pouvez également monitorer des composants de votre machine.

Il est donc possible de savoir l’espace disponible sur votre serveur dédié, la température de votre processeur, celle de votre disque dur, etc.

Je ne l’ai pas mis pour le moment mais ça ne saurait tarder, surtout pour recevoir une petite alerte quand le disque commence à être plein ! Vous trouverez des exemples sur le site mentionné ci-dessus.

Notifications

Quand un processus s’arrête ou se relance, vous recevez automatiquement une alerte. Cela vous permet d’aller vérifier si c’est récurrent d’où peut venir le problème.

C’est vraiment pratique ! C’est grâce à Monit que j’ai découvert que mon processus MySQL tombait régulièrement. Monit m’a donc permis de le relancer automatiquement, pratique pour éviter les interruptions de service et aussi de corriger le problème !

J’espère que ce petit tutoriel vous aidera à monitorer votre serveur dédié et à éviter des problèmes avec celui-ci. Si vous avez des idées/améliorations à apporter à celui-ci, n’hésitez pas dans les commentaires ci-dessous ! Bon monitoring les amis.

Monit

Gratuit

5/ 5

Outil vraiment indispensable à mes yeux, Monit vous permet de gérer et de surveiller votre serveur VPS ou dédié. Simple et rapide à installer, essayez cet outil gratuitement !

Commentaires

Made with by Antoine Guilbert