Journal Gérer les logs de plusieurs serveurs

Posté par .
Tags : aucun
0
26
mar.
2008

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 . Évalué à 4.

    2 cas:
    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 . Évalué à 1.

    J'utilise logrotate.
    Et on peut utiliser logrotate pour plein d'autres choses.
    Pour les backups, un rsync.
  • # apache_syslog

    Posté par . Évalué à 5.

    On utilise apache_syslog http://www.oreilly.com/pub/a/sysadmin/2006/10/12/httpd-syslo(...)

    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 . Évalué à 3.

    3) Utiliser syslog qui permet d’envoyer des logs vers un serveur centralisateur (@<adresse ou nom du serveur> dans syslog.conf).

    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 (page perso) . Évalué à 4.

    Je rêve ou il pose une question en journal de première page ?

    DLFP devient vraiment n'importe quoi...
    • [^] # Re: heuu...

      Posté par (page perso) . Évalué à 2.

      Tiens, pour une fois que ce n'est pas moi qui fait la remarque...
      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 (page perso) . Évalué à 6.

    Il suffit de piper vers logger qui se charge d'envoyer les messages au syslog. De son coté le syslog doit être configuré pour déporter ses logs vers un serveur de logs central:

    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 . Évalué à 2.

      Merci pour toutes vos réponses :)

      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 . Évalué à 2.

    "ça demande un redémarrage d'Apache, c'est pas vraiment l'idéal."
    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 à ceux qui les ont postés. Nous n'en sommes pas responsables.