2. Configurer le serveur de logs

Installer rsyslog

Dans la plupart des distributions modernes, syslog a été remplacé par rsyslog. Il existe d'autres logiciels, comme syslog-ng, mais, si ce dernier présente une version OpenSource, de nombreuses fonctionnalités complémentaires sont payantes et non libres.

Si rsyslog n'est pas installé par défaut, un simple apt-get install rsyslog fera le travail. Vous pouvez également le récupérer depuis le site http://www.rsyslog.com/download/.

Configurer rsyslog

Accepter les connexions depuis les autres serveurs

Dans le fichier /etc/rsyslog.conf, rajoutez (ou décommentez) les lignes suivantes :

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 10514

Le serveur acceptera alors les messages transmis en UDP vers le port 514, et en TCP vers le port 10514.

Rajouter des exceptions ou des traitements particuliers

De nombreux messages transmis par les serveurs peuvent être des bogues, sans grande conséquence sur le fonctionnement général. Bien évidemment, vous chercherez à corriger ces bogues... Mais il est également possible de supprimer certains messages récurrents qui ne semblent pas particulièrement pertinents.

On peut également chercher à stocker certains messages dans des fichiers spécifiques.

Pour cela, créez, dans le dossier /etc/rsyslog.d/, le fichier 30-specifique.conf.

Pour la syntaxe du fichier, je vous invite à consulter soit la documentation en ligne de rsyslog1, soit le document réalisé par CANONICAL2, en anglais, mais très clair et suffisamment didactique.

Pour supprimer un message contenant un texte spécifique :

:msg, contains, "/usr/lib/php5/maxlifetime" ~

Le signe ~ permet de supprimer le message sans le traiter.

Pour stocker un message dans un fichier spécifique :

:msg, contains, "DHCPACK" /var/log/dhcpd.log
:msg, contains, "DHCPACK" ~

La seconde ligne va permettre de supprimer le message une fois qu'il aura été traité ; dans le cas contraire, il sera également stocké dans /var/log/syslog (traitement par défaut de tous les messages). Si on ne définit par une condition de destruction, le message sera traité par toutes les lignes qui lui correspondront.

Ce mécanisme permet, ainsi, de conserver les traces dans le fichier initial et, en même temps, de les envoyer vers le serveur central.

Il est théoriquement possible de réaliser des tests complexes ; néanmoins, avec la version 5.8.6-1, ces tests ne fonctionnent pas. Voici une syntaxe qui aurait pu (dû ?) marcher :

if $hostname value 'monserveur' and ( $msg contains "Error - should be sent to WINS server" or $msg contains "nmbd/nmbd_incomingrequests.c:172(process_name_refresh_request)" ) then ~

Ce fichier doit être construit au fur et à mesure, mais assurez-vous que vous ne supprimez pas des messages dont l'intérêt serait réel...

Configurer la rotation des logs

Vous pouvez soit rajouter un fichier dans le dossier /etc/rsyslog.d/, soit éditer le fichier rsyslog3. Voici un exemple de modification de rsyslog :

/var/log/syslog
{
rotate 52
weekly
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
/var/log/dhcpd.log
/var/log/cupspage.log
/var/log/apache2_access.log
/var/log/apache2_error.log
{
rotate 52
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}

(En gras, les modifications ou rajouts). Pour les détails de la configuration, consultez l'aide de logrotate (man logrotate).

Installer LogAnalyzer

LogAnalyzer est un logiciel PHP qui peut lire nativement les fichiers de logs RSYSLOG, ou bien, si les traces ont été stockées en base de données, lire les informations directement dans le SGBD.

Par ailleurs, pour stocker sa configuration et les comptes autorisés à se connecter, LogAnalyzer a besoin de sa propre base de données.

Télécharger LogAnalyzer

Depuis le site : http://loganalyzer.adiscon.com/downloads

Décompressez l'archive, et recopiez le contenu du dossier src dans /var/www.

Installer une base de données MySql pour stocker les paramètres de LogAnalyzer

Installez MySql Server dans votre serveur, et au besoin, phpmyadmin, pour en faciliter la gestion.

Dans MySql, créez une base de données (p. e., loganalyzer) et un compte pour y accéder localement.

Configurer LogAnalyzer

Dans /var/www, assurez-vous que le compte www-data ait les droits d'accès totaux au fichier config.php, puis lancez l'interface web (http://svlog/index.php).

Le programme vous proposera de configurer la base de données, et vous pourrez ensuite déclarer les différents fichiers que vous souhaitez manipuler.

Configurer les droits d'accès aux fichiers de logs

Pour que LogAnalyzer puisse interroger les fichiers de logs, stockés dans /var/log, il faut que le compte www-data puisse y accéder.

Installez le paquet acl dans votre serveur (apt-get install acl), puis modifiez la partition qui contient /var/log dans le fichier /etc/fstab :

/dev/mapper/racine-varlog /var/log ext4 acl 0 2

Rechargez le fichier fstab pour que la partition puisse prendre en compte les ACL :

mount -a

Et définissez les droits d'accès pour le compte www-data :

setfacl -R -m u:www-data:rx /var/log
setfacl -R -m d:u:www-data:rx /var/log

1http://www.rsyslog.com/doc/manual.html

2http://www.canonical.com/sites/default/files/active/Whitepaper-CentralisedLogging-v1.pdf

3Le fichier rsyslog devra, de toute façon, être modifié, pour adapter la durée de conservation des traces

Mettre en place un serveur central de logs avec RSYSLOG 3. Configurations spécifiques des serveurs distants