Bonjour,
Je cherche à faire un script qui analyserait des fichiers logs pour ne récupérer pour le moment que les lignes qui m'intéressent.
Ce sont des logs du type :
[1243769124] HOST ALERT: serveur1;UP;HARD;1;PING OK - Packet loss = 0%, RTA = 4.35 m
[1243769176] SERVICE ALERT: serveur2;CPU Load;OK;HARD;1;OK - load average: 0.00, 0.00, 0.00
Pour le moment, je cherche à récupérer les lignes qui se situent dans un intervalle de temps donné ainsi que le noms des serveurs correspondant aux noms présent dans un fichier.
J'ai réussi à faire celà en faisant une première commande qui me récupère le nom des serveurs et qui m'enregistre le résultat dans un fichier texte et ensuite en analysant le temps de ce nouveau fichier.
Cette solution n'est pas viable pour moi, car je peux avoir plus de 20Go de fichiers logs à parcourir. Cette méthode peut poser à terme un problème de place et de performances.
Il faudrait que je n'ai à parcourir mon fichier log qu'une seule fois.
J'ai fait pour filtrer le temps :
awk /temps de début/,/temps de fin/' chemin de mon fichier log (a terme ce sera un fichier contenant le nom de tous mes fichiers logs à analyser)
Pour filtrer par serveurs :
egrep `sed ':a;N;$!ba;s/\n/\|/g' /tmp/serveurs.txt` chemin de mon fichier log
Je n'arrive pas à trouver une solution pour faire les deux en une seule fois.
Quelqu'un aurait une idée ?
Je vous remercie.