schirrms2
2011-12-07 21:38:55 UTC
Bonsoir,
Je suis confronté à un problème d'analyse de fichiers logs. En fait,
j'ai un programme, qui tourne toutes les 5 minutes et qui (entre autres)
analyse différents fichiers logs.
Le but de l'opération est d'analyser les nouveaux évènements survenus
pendant les 5 dernières minutes.
Mon prédécesseur a géré ceci de manière qui me semble un peu 'lourde' :
A chaque rotation du programme, le fichier log est copié dans son
intégralité. 5 minutes plus tard, le programme exécute la commande
système 'diff fichier_log_courant fichier_log_-5_minutes'.
Cà fonctionne ... à peu près. En fait, j'ai mis le nez dedans parce qu'à
la rotation des logs, le nouveau fichier log est tout petit, et donc le
diff est gros !
Bref, dans la mesure où perl sait se positionner dans un fichier, je
pensais plutôt refaire ceci plus ou moins de la manière suivante :
Run 1, je note la taille du fichier et son n° d'inode.
Run 2, je relis le fichier de log depuis la position noté au run
précédent. Si le n° d'inode a changé, je lis depuis le début (et, cerise
sur le gâteau, si j'en suis capable, je lis la fin du fichier de log
précédent).
J'ai l'impression que tout ceci est hyper basique, et je m'attendais à
trouver un module tout fait sinon dans le perl embarqué sur mon serveur,
au moins sur le CPAN.
Mais je dois m'y prendre fort mal pour mes recherches, je n'ai quasiment
rien trouvé.
Il y a bien ce module : File::LogReader (Sur le CPAN) qui semble
répondre en partie à ma demande (et que je vais tester), mais avez vous
autre chose dans votre besace ?
Merci,
Pascal
Je suis confronté à un problème d'analyse de fichiers logs. En fait,
j'ai un programme, qui tourne toutes les 5 minutes et qui (entre autres)
analyse différents fichiers logs.
Le but de l'opération est d'analyser les nouveaux évènements survenus
pendant les 5 dernières minutes.
Mon prédécesseur a géré ceci de manière qui me semble un peu 'lourde' :
A chaque rotation du programme, le fichier log est copié dans son
intégralité. 5 minutes plus tard, le programme exécute la commande
système 'diff fichier_log_courant fichier_log_-5_minutes'.
Cà fonctionne ... à peu près. En fait, j'ai mis le nez dedans parce qu'à
la rotation des logs, le nouveau fichier log est tout petit, et donc le
diff est gros !
Bref, dans la mesure où perl sait se positionner dans un fichier, je
pensais plutôt refaire ceci plus ou moins de la manière suivante :
Run 1, je note la taille du fichier et son n° d'inode.
Run 2, je relis le fichier de log depuis la position noté au run
précédent. Si le n° d'inode a changé, je lis depuis le début (et, cerise
sur le gâteau, si j'en suis capable, je lis la fin du fichier de log
précédent).
J'ai l'impression que tout ceci est hyper basique, et je m'attendais à
trouver un module tout fait sinon dans le perl embarqué sur mon serveur,
au moins sur le CPAN.
Mais je dois m'y prendre fort mal pour mes recherches, je n'ai quasiment
rien trouvé.
Il y a bien ce module : File::LogReader (Sur le CPAN) qui semble
répondre en partie à ma demande (et que je vais tester), mais avez vous
autre chose dans votre besace ?
Merci,
Pascal