On peut trouver assez facilement sur internet des tutoriaux permettant de mettre en place un serveur de log centralisé grâce à php-syslog-ng. Je ne peux d'ailleurs que vous conseillez celui d'ubuntu-fr. Toutefois la technique employée me semblait un peu complexe.
Alors je me suis un peu creusé la tête. Ça m'a causé un anévrisme mais ça passera je crois. Donc pour résumer, afin de peupler la base Mysql avec logs arrivant sur le serveur, on indique au démon de les envoyer dans un tube. Ensuite, un script tourne en boucle afin de lire le contenu et d'écrire dans la base données.
Vous pouvez vous en rendre compte, on a vu mieux qu'une boucle infinie qui va consommer un peu trop de ressources. Sans compter qu'il faut lancer ce script automatiquement au démarrage et personnellement, j'aime pas trop polluer mon répertoire /etc/init.d/.
La solution que j'ai trouvé est de s'appuyer sur une autre méthode de syslog-ng, la redirection vers un programme. En effet, Mysql peut être lancer en mode batch. Ainsi, il n'y a pas de prompt et le client se met en attente de commandes SQL. C'est exactement ce qu'on veut. Il suffit de configurer syslog-ng ainsi :
destination d_mysql {
program(
"mysql -u syslogfeeder --password=xxxxxxxx syslog -B > /dev/null"
template("INSERT INTO logs (host, facility, priority,
level, tag, datetime, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL',
'$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n")
template-escape(yes)
);
};
Et voilà, pas besoin d'utiliser plein d'artifices, ça se fait tout seul. Le seul problème, c'est que le mot de passe d'accès à la base de données et visible via la commande ps. Mais normalement, l'accès au serveur devrait être contrôlé...