Forum Linux.redhat Trouver source d'un log

Posté par . Licence CC by-sa
0
28
oct.
2015

Bonjour,

Je viens de commencer dans une très grande entreprise française connu.
Ils ont développé leur propre outil de monitoring (type Nagios).
Cependant plusieurs personnes se sont relayés sur ce développement, et l'organisation logique de certain script est devenu assez aléatoire …
Existe t-il une solution simple pour savoir quel script a généré mon log ?

je fais d'énorme find /data -name "*" -exec grep -Hn "nomdefichier" {} \;

en espérant trouver le fichier qui possède la ligne "> nomdefichier" dans les résultat.

Mais cela prend énormément de ressource, car je dois travailler sur plusieurs centaines de giga et en plus le nom de mon log n'est pas toujours en clair dans le script car souvent il est de la form "> $site-$environement-monlog.log".

A l'aide,

Merci.

  • # lsof

    Posté par . Évalué à 6.

    si le script ecrit actuellement dans le log,
    un simple lsof /chemin/vers/fichier.log devrait te dire qui ce sert de ce fichier.

    ex chez moi

    monshell# sudo lsof /var/log/messages 
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    syslog-ng 1068 root   17w   REG    8,5   660061  392 /var/log/messages
  • # rahh

    Posté par . Évalué à 1.

    Oui je connais cette commande, mais je ne pense pas que cela m'aidera, un crontab est planifié tous les matins, il lance une dizaine de script qui lancent chacun quelques scripts ,qui lancent des scripts …. sur 1200 machines et à la fin un script met à jour mon fichier, donc j'aurai du mal à prévoir le moment exact pour planifier mon lsof avec un "at" …

    Peut on auditer l'accès au fichier comme avec lsof mais sur plusieurs minutes ?

    • [^] # Re: rahh

      Posté par . Évalué à 5.

      en bourrinant ?

      watch -n10 lsof /var/log/messages

      va lancer lsof toutes les 10 secondes et comme lsof ne renvoie rien s'il n'a rien trouver, tu devrais avoir ton resultat

      de plus il prend aussi les wildcards, par exemple

      lsof /var/log/monappli/*

      du coup si tu fais un watch avant de partir, ou lancer juste avant le demarrage des crons, que tu rediriges vers ton propre fichier de log (dans un autre dossier), tu dois pouvoir obtenir une liste de fichier utilisés et par quelles applis.

      ex chez moi

      COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
      check_cur   373 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   437 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   462 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   469 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   485 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   615 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   617 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   618 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      check_snm   619 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      tail: /tmp/monlog: file truncated
      COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
      syslog-ng  1068   root   17w   REG    8,5   869159    392 /var/log/messages
      sed        3225 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        3320 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        3410 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        4661 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        4750 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        4752 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        4753 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      sed        4754 nagios  cwd    DIR  253,0     4096 131074 /data/log/nagios
      [...]

      y a plus qu'à faire un peu de nettoyage…
      comme ne recuperer que la colonne 1 et 9 (script, log)
      ou bien 1, 3 et 9 (script, utilisateur, log)
      classer et supprimer les doublons

      et ca donne :

      monshell#awk '{print $1";"$3";"$9}' /tmp/monlog | sort -u
      COMMAND;USER;NAME
      sed;nagios;/data/log/nagios
      syslog-ng;root;/var/log/messages
    • [^] # Avec un pipe nommé ?

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

      Est-ce qu'il n'est pas possible de remplacer ton fichier par un pipe nommé, qui serait lu par un programme qui resterai en tâche de fond.

      Dès que le processus écrit dans les logs, le programme détecte des données sur l'entrée standard et lance le lsof pour savoir qui est en train d'écrire.

      Je propose l'idée mais je n'ai pas expérimenté…

    • [^] # Re: rahh

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

      Peut on auditer l'accès au fichier comme avec lsof mais sur plusieurs minutes ?

      oui avec sysdig

  • # C'est du peut être...

    Posté par . Évalué à 7.

    …mais tu peux tenter ta chance avec inotifywait et essayer un truc du genre :

    inotifywait -e modify /chemin/vers/le/log && lsof /chemin/vers/le/log

    J’avoue, je n'ai jamais testé.

    inotify sur linuxfr
    detecting-which-process-is-creating-a-file

  • # non

    Posté par . Évalué à 2.

    Oui mais je ne peux pas installer ce que je veux, je suis sur de la prod, et on utilise des versions qui doivent être validées, et pareil pour les applications, choses qui peut prendre très longtemps …

    Sinon j'aurai testé auditdb …

    • [^] # Re: non

      Posté par . Évalué à 6.

      je penses que tu voulais repondre à la proposition inoitifywait.

      pour repondre à une personne, il faut cliquer sur "repondre" en dessous de son post,
      et non sur "poster un commentaire" qui va repondre au post initial

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.