Niveau : Expert

Monitoring serveur

Monitoring d'un serveur avec Monit et Logwatch

Tutoriel par (Alsacréations, Strasbourg)
Créé le , mis à jour le (74418 lectures)
Tags : développement, serveur, monitoring, monit, logwatch

Monitoring

Café

Il est important de surveiller l'état de votre serveur et d'être prévenu si une anomalie survient, le plus souvent par e-mail. Nous suggérons l'emploi de Monit et Logwatch.

N'hésitez pas à utiliser d'autres outils tels que les graphiques MRTG ou RRD qui permettront de surveiller la charge réseau et processeur de votre serveur sur le long terme, ainsi que l'espace disque, le temps de réponse, ou toute autre valeur numérique pertinente. Ceci ne fera pas l'objet d'un développement dans ce tutoriel.

Commandes utiles

Des outils de base existent pour ausculter la machine en ligne de commande.

top
Liste les processus en cours d'exécution et leur identifiant (PID)
kill
Tue un processus grâce à son PID
ftptop
Liste des connexions au serveur FTP
iftop
Top des interfaces réseau (installation par apt-get install iftop)
apachetop
Top Apache (installation par apt-get install apachetop)
mtop
Top MySQL (installation par apt-get install mtop)

En ce qui concerne le réseau :

netstat -tap
Liste les connexions établies
netstat -tulp
Liste les ports en écoute
lsof -n | grep LISTEN
Liste les ports en écoute
lsof -n | grep UDP
Liste les connexions UDP

Monit

Monit est une application permettant de surveiller l'état des services (notamment web, ftp, mail, mysql, ssh) par une interface web, et de notifier l'administrateur si nécessaire (trop grande charge cpu, redémarrage, indisponibilité...).

Installation

L'installation de Monit se réalise en quelques secondes grâce au paquet éponyme :

apt-get install monit

La configuration de Monit se fait en deux temps. Tout d'abord, autoriser le démarrage du service en éditant /etc/default/monit.

vi /etc/default/monit

Modifier l'option startup à 1.

startup=1

Ensuite, éditer le fichier de configuration /etc/monit/monitrc contenant la description de tous les services à surveiller.

vi /etc/monit/monitrc

Voici un exemple complet. Celui-ci est relativement explicite et à adapter selon votre configuration notamment pour le port SSH (22 par défaut) qui est ici 1337 pour correspondre au précédent tutoriel de configuration.

set mailserver
Indique le(s) serveur(s) de mail à utiliser pour l'envoi des notifications
set alert
Indique les adresses destinataires
set httpd port
Spécifie le port de connexion web. Vous pourrez ensuite vous connecter grâce à votre navigateur sur l'IP et le port correspondant (ex: http://test.alsacreations.com:8080/ )
allow login:password
Spécifie le couple login/password pour l'accès web (à renseigner)
check device
Va permettre de surveiller l'espace disque restant : il faut ici indiquer le bon path vers /dev/XXX correspondant à la partition à monitorer (ex : /dev/sda, /dev/md1... selon votre configuration)
# Config
set daemon 120
set logfile syslog facility log_daemon
set mailserver localhost, smtp.free.fr
set mail-format {
    from: monit@$HOST
    subject: $HOST - Monit : $EVENT $SERVICE
    }
set alert monitoring@test.com
set httpd port 8080 and
   allow login:password

# Apache 2
check process httpd 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 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
if cpu is greater than 85% 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

# 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 1337 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

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

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

# Disk
check device sda1 with path /dev/sda1
if space usage > 85% then alert
group system

Vous êtes libre d'ajouter tous les services à monitorer sur votre machine (pop3, imap, spamassassin, clamav, fail2ban...). La syntaxe est abordable et les exemples nombreux. Pour vérifier cette syntaxe, utilisez la commande :

/etc/init.d/monit syntax

Si aucun message d'erreur n'est indiqué, vous pourrez ensuite démarrer monit :

/etc/init.d/monit start

Vérifiez une nouvelle fois la bonne interprétation de la configuration grâce à monit -v.

Logwatch

Logwatch est par un démon pouvant analyser et résumer les logs générés par les autres services durant la journée pour en détecter d'éventuelles anomalies ou en tirer des statistiques. Il permet d'envoyer un e-mail récapitulatif quotidien à l'administrateur. Son installation est elle aussi très simple grâce à APT et au paquet éponyme :

apt-get install logwatch

La configuration par défaut suffit amplement, il suffit de modifier le destinataire dans le fichier /usr/share/logwatch/default.conf/logwatch.conf. Celui-ci peut se trouver à un autre endroit du disque, n'hésitez pas à vous servir de la commande locate.

vi /usr/share/logwatch/default.conf/logwatch.conf

Modifiez l'option MailTo

MailTo = monitoring@test.com

Vérifiez au besoin la présence de logwatch dans le répertoire /etc/cron.daily/ dont les scripts sont exécutés quotidiennement.

Voir aussi : Sécurité et Firewall