Comment gérer les logs de plusieurs serveurs Apache ?
- rotatelogs:
Premier constat, Apache1 a quelques problèmes dés que l'access.log dépasse les 2Go, il faut donc ruser pour qu'il ne dépasse pas cette taille. Faire un logrotate plus souvent ? Non, ça demande un redémarrage d'Apache, c'est pas vraiment l'idéal.
Il y a donc l'outil rotatelogs qui vient avec Apache et qui s'utilise très simplement:
CustomLog "|/usr/bin/rotatelogs /var/log/apache/access.log-%Y.%m.%d-%H 3600"
La syntaxe est explicite, Apache va piper les logs sur /usr/bin/rotatelogs, qui lui va s'occuper d'écrire les logs dans un fichier différent toutes les heures :)
- clfmerge:
Bon, on se retrouve avec non seulement des logs dispersés sur plusieurs serveurs, mais aussi plusieurs fichiers par serveur. Pour archiver, générer des statistiques ou faire quelques traitements dessus, il est pratique d'avoir un seul fichier.
Pour ça il y a l'outil clfmerge (logtools). Il prend le nom des logs en paramètres, il les lit, et les envoi triés sur la sortie standard:
clfmerge access.log1 access.log2 access.log3 > access.log :) - ???:
Maintenant vient le problème du rassemblement des logs de chaque serveur, parce qu'avant de pouvoir les fusionner avec clfmerge il faut les centraliser quelque part ;)
Je n'ai pas trouvé de solution vraiment idéalle pour ça.
Comment faites vous ? Avez vous quelque chose du style syslog pour logger directement sur une autre machine ? Logger via NFS ? Ou faites vous simplement une copie de serveur à serveur ?
# Alors...
Posté par nullisimo . Évalué à 4.
1er cas:
1. un mod_log_config patche pour le signal-free rotate + flags de compilation pour les logs > 2Go
2. ensuite gzip en background temporise pour eviter un pic I/O
3. rsync
4. zmergelog
2eme cas:
mod_log_spread + spreadlogd
# logrotate
Posté par IsNotGood . Évalué à 1.
Et on peut utiliser logrotate pour plein d'autres choses.
Pour les backups, un rsync.
# apache_syslog
Posté par WaVeR . Évalué à 5.
Qui envoi les logs dans syslog-ng et le syslog-ng de la machine locale envoi les logs sur un serveur de log distant puis avec un filtre syslog-ng on peut avoir un seul fichier de logs ayant tout les access.log des frontend
# ???
Posté par Benoit . Évalué à 3.
Ensuite, il faut utiliser la fonction CustumLog d’apache pour envoyer les logs vers un programme (scripte perl) qui redirige ceux-ci vers syslog, car nativement Apache permet uniquement d’envoyer les messages d’erreur vers syslog.
# heuu...
Posté par Snarky . Évalué à 4.
DLFP devient vraiment n'importe quoi...
[^] # Re: heuu...
Posté par Zenitram (site web personnel) . Évalué à 2.
Déja les questions de forum en journal de 2ème page, maintenant en journal de première page...
Bientôt une question en dépêche de première page?
(bon, la c'est modéré, donc peu de chance... Mais si ce n'était pas modéré, quelqu'un l'aurai déja sans doute fait :) ).
# /usr/bin/logger
Posté par ArnY (site web personnel) . Évalué à 6.
CustomLog "|/usr/bin/logger -p local0.info -t apache2-access"
ErrorLog syslog:local0
Sur le serveur de logs central, syslog-ng place les logs dans /var/log//
Simple.
Nous centralisons comme ça les logs d'une 100aine de serveurs, c'est propre et efficace.
[^] # Re: /usr/bin/logger
Posté par andeus . Évalué à 2.
J'ai regardé un peu ce qu'il est possible de faire avec syslog-ng, c'est vrai que c'est intéressant. Notamment la fonction de "template" qui permet dans ce cas de ne logger que les logs apache, sans ajouter date/serveur/programme au début des lignes.
Vous envoyez les logs de plusieurs serveurs dans le même fichier directement ? Les logs arrivent dans le bon ordre ou il faut les trier par la suite ?
# graceful
Posté par Romeo . Évalué à 2.
apachectl graceful, pas forcement une idée bonne idée lors de forte charge, mais si tu n'as besoin d'une rotation que quelques fois par jour ça posera pas de soucis.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.