Surveiller un serveur avec Logwatch
Installation et configuration
L'installation sur Ubuntu est comme toujours très simple:
sudo apt-get install logwatch
Par défaut logwatch crée une entrée crontab afin d'envoyer chaque jour le résultat de l'analyse par email. Pour recevoir ces emails, il faut ajouter son adresse email dans /etc/logwatch/conf/logwatch.conf. Malheureusement ce fichier n'est pas créé lors de l'installation. La solution la plus simple est donc de copier /usr/share/logwatch/default.conf/logwatch.conf:
sudo cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
On peut ensuite le modifier:
MailTo = votre@email.com
VirtualHosts
Logwatch analyse les fichiers de log d'Apache (/var/log/apache2/*access.log). Malheureusement, il supprime le nom du VirtualHost, ce qui rend l'interprétation difficile. Pour voir apparaître le nom des VirtualHosts dans le rapport, il faut créer un nouveau format de log dans /etc/apache2/apache2.conf. Au lieu du classique
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
Il faut utiliser:
LogFormat "%h %l %u %t \"%m %{Host}i%U%q %H\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" logwatch
CustomLog /var/log/apache2/access.log logwatch
Dans lequel:
- %h est la machine distante (généralement son adresse IP)
- %l est le "Remote logname" (généralement "-")
- %u Utilisateur distant (si le site utilise une authentification HTTP, sinon "-")
- %t est le moment où la requête a été reçue
- %r est la première ligne de la requête ("GET /index.php?id=123 HTTP/1.1" par exemple)
- %>s est le statut de la requête (s'il y a eu des redirections internes, c'est le dernier statut qui est affiché, 200 par exemple)
- %O est le nombre de bytes envoyés
- %m est la méthode HTTP utilisée pour la requête (GET)
- %U est l'URL demandée (/index.php)
- %q sont les paramètres (?id=123)
- %H est le protocole utilisé (HTTP/1.1)
On a donc remplacé %r ("GET /index.php?id=123 HTTP/1.1") par %m %{Host}i%U%q %H (GET www.monsite.com/index.php?id=123 HTTP/1.1)
Erreurs PHP
Pour que Logwatch puisse également analyser les erreurs PHP, il faut les enregistrer dans un fichier séparé. Il faut donc d'abord créer le dossier /var/log/php et lui attribuer les permissions correctes:
sudo mkdir /var/log/php
sudo chown www-data:www-data /var/log/php
Puis modifier /etc/php5/apache2/php.ini:
log_errors = On
error_log = /var/log/php/error.log
Redémarrer Apache, et enfin indiquer à logwatch d'analyer les fichiers /var/log/php/error.log. Il faut pour celà modifier le fichier /usr/share/logwatch/default.conf/logfiles/php.conf :
LogFile = php/*error.log
LogFile = php/*error.log.1
PHP et logrotate
Maintenant que les erreurs enregistrées dans un fichier séparé, il faut configurer logrotate, afin de créer un nouveau fichier log chaque semaine (comme c'est déjà le cas pour les fichiers Apache error.log et access.log par exemple). Pour cela, créer le fichier /etc/logrotate.d/php suivant :
/var/log/php/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 www-data www-data
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}