AWK et traitement de logs
ooliver27
-
ooliver27 -
ooliver27 -
Bonjour,
je travaille actuellement sur des logs http d'un pare-feu que je dois trier et dont je dois extraire des stats.
Par exemple, je reçois ce type de log:
src=10.0.0.2 dstname=www.google.fr rcvd=3123
src=10.11.20.56 dstname=www.yahoo.com rcvd=12987
...
Et je dois obtenir la liste des sites les plus visités, et la liste des sites qui génèrent le plus de trafic (avec le champ rcvd). On m'a conseillé AWK pour effectuer le traitement, mais comme Awk ne gère ni les tableaux à deux dimensions, ni les variables structurées, j'ai un peu mal...
Qqn peut m'expliquer comment je pourrais faire? Merci! Je précises que la machine qui traite les logs tourne sous Debian 5.0. Donc s'il y a mieux et plus simple qu'awk, je suis preneur!!
je travaille actuellement sur des logs http d'un pare-feu que je dois trier et dont je dois extraire des stats.
Par exemple, je reçois ce type de log:
src=10.0.0.2 dstname=www.google.fr rcvd=3123
src=10.11.20.56 dstname=www.yahoo.com rcvd=12987
...
Et je dois obtenir la liste des sites les plus visités, et la liste des sites qui génèrent le plus de trafic (avec le champ rcvd). On m'a conseillé AWK pour effectuer le traitement, mais comme Awk ne gère ni les tableaux à deux dimensions, ni les variables structurées, j'ai un peu mal...
Qqn peut m'expliquer comment je pourrais faire? Merci! Je précises que la machine qui traite les logs tourne sous Debian 5.0. Donc s'il y a mieux et plus simple qu'awk, je suis preneur!!
A voir également:
- AWK et traitement de logs
- View recovery logs - Guide
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
- Traitement de texte gratuit - Guide
- Ce logiciel gratuit et léger est parfait pour remplacer Word, même sur un vieux PC - Guide
- Traitement de texte gratuit open office - Télécharger - Suite bureautique
4 réponses
Ca change pas mal de choses.
Avec un simple script perl, cela se fait en deux coups de cuillère à pot.
toto.pl
Pour lancer utiliser le fichier : cat Log | toto.pl
N'oublie pas de faire chmod u+x pour mettre les droits nécessaires à l'exécution du programme.
De plus, le script toto.pl réalise juste la sortie de la forme : www.google.fr 81 visites 678098 Ko.
Je ne savais par quoi tu voulais trier, je te laisse modifier le script perl ;)
Si tu sais pas, tu peux passer par sort.
Pour le tri par nombre de visites :
cat Log | toto.pl | sort -rn -k3
Pour le tri par somme des rcvd :
cat Log | toto.pl | sort -rn -k5
Cdlt
Avec un simple script perl, cela se fait en deux coups de cuillère à pot.
toto.pl
#!/usr/bin/perl
use strict;use warnings;
my %tab;
while (<STDIN>) {
/dstname=(.*) rcvd=(.*)/;
$tab{$1}[0]++;
$tab{$1}[1]+=$2;
}
foreach my $k (keys %tab) {
print "$k visites $tab{$k}[0] visites $tab{$k}[1] Ko\n";
}
Pour lancer utiliser le fichier : cat Log | toto.pl
N'oublie pas de faire chmod u+x pour mettre les droits nécessaires à l'exécution du programme.
De plus, le script toto.pl réalise juste la sortie de la forme : www.google.fr 81 visites 678098 Ko.
Je ne savais par quoi tu voulais trier, je te laisse modifier le script perl ;)
Si tu sais pas, tu peux passer par sort.
Pour le tri par nombre de visites :
cat Log | toto.pl | sort -rn -k3
Pour le tri par somme des rcvd :
cat Log | toto.pl | sort -rn -k5
Cdlt
Salut,
Il y a sûrement plus court, mais tu peux utiliser :
Le premier sed va rajouter une colonne contenant le champ rcvd. Grâce à cette colonne, on va trier suivant les valeurs numériques (sort -n). Et enfin on supprime cette colonne.
Si tu veux récupérer la colonne dstname :
Cdlt
Il y a sûrement plus court, mais tu peux utiliser :
sed 's/.* rcvd=\([0-9]*\)/\1\|&/' Log | sort -rn | cut -d'|' -f2
Le premier sed va rajouter une colonne contenant le champ rcvd. Grâce à cette colonne, on va trier suivant les valeurs numériques (sort -n). Et enfin on supprime cette colonne.
Si tu veux récupérer la colonne dstname :
sed 's/.* rcvd=\([0-9]*\)/\1\|&/' Log | sort -rn | awk '{print $2}'
Cdlt
Merci fiddy, mais j'ai oublié de préciser qqchose: les logs que je reçois correspondent à des trames. Donc, j'ai plusieurs fois les mêmes sites qui apparaissent:
src=10.0.0.2 dstname=www.google.fr rcvd=3123
src=10.11.20.56 dstname=www.yahoo.com rcvd=12987
src=10.0.1.4 dstname=www.google.fr rcvd=6453
...
En fait, il faudrait que je compte le nombre de fois ou un site apparait, et que j'additionne le nombre de "rcvd" correspondant. Pour obtenir quelche chose dans ce genre:
www.google.fr 81 visites 678098 Ko
www.yahoo.com 21 visites 56989 Ko
...
src=10.0.0.2 dstname=www.google.fr rcvd=3123
src=10.11.20.56 dstname=www.yahoo.com rcvd=12987
src=10.0.1.4 dstname=www.google.fr rcvd=6453
...
En fait, il faudrait que je compte le nombre de fois ou un site apparait, et que j'additionne le nombre de "rcvd" correspondant. Pour obtenir quelche chose dans ce genre:
www.google.fr 81 visites 678098 Ko
www.yahoo.com 21 visites 56989 Ko
...