Bonjour a tous et meilleurs vœux par la même occasion,
J’ai besoin d’aide concernant un petit projet que j’ai a faire:
Je dois réaliser un script bash qui permet d’analyser les fichier de log d’un serveur apache et de ressortir certaines informations.
Voici mes objectifs:
1)Afficher la liste des 10 adresses IP les plus actives.
En option,pour chacune de ces adresses,il faut récupérer le FQDN s’il existe et le nombre d’IP sans FQDN.
2)Afficher un histogramme des accès heure par heure
3)Afficher la liste des 5 erreurs les plus fréquentes.
4)Afficher le nombre de robots qui on indexé le site.
5)Afficher le temps d’accès moyen pour une même adresse IP
6)Connaitre le nombre de pages lues pour une adresse IP
7)Connaitre le nombre de pages imprimées par IP
J’ai déjà un peu avancé sur le projet :
La tache 3 est faite, voici le code:
touch temp.txt
executed=$(cat access.log | grep '\" 204'|wc -l)
echo "$executed erreurs 204">temp.txt
movedtemp=$(cat access.log | grep '\" 302'|wc -l)
echo "$movedtemp erreurs 302">>temp.txt
partial=$(cat access.log | grep '\" 206'|wc -l)
echo "$partial erreurs 206">>temp.txt
notfound=$(cat access.log | grep '\" 404'|wc -l)
echo "$notfound erreus 404">>temp.txt
redirect=$(cat access.log | grep '\" 301'|wc -l)
echo "$redirect erreurs 301">>temp.txt
forbidden=$(cat access.log | grep '\" 403'|wc -l)
echo "$forbidden erreurs 403">>temp.txt
badrequest=$(cat access.log | grep '\" 400'|wc -l)
echo "$badrequest erreurs 400">>temp.txt
sort -n -r temp.txt >/dev/null
head -5 temp.txt
rm temp.txt
La tache 1 est partiellement faite il faut juste récupérer les FQDN avec leurs adresses respectives.
Voici le code:
cut -d ' ' -f1 $access |sort|uniq -c |sort -n|tail>temp.txt
sort -r -n temp.txt >temp1.txt
rm temp.txt
while read champ1 champ2
do
b=0
tab[$b]=$champ1
b=$(($b+1))
echo -n ${tab[0]}
echo -n " vues pour l'adresse: "
tab[$b]=$champ2
echo ${tab[1]}
done <temp1.txt
Mes questions sont:
Que pensez vous du code ?,clarté,efficacité etc, si possible pouvez vous me donner des pistes pour l’améliorer.
Avez vous des pistes pour les autres taches ?
Merci d’avance,
jjbond.
Ps: je joins le fichier de log à traiter pour que vous ayez une idée sur le code.
Le fichier de log faisant plus de 55mo je l’ais compresser.
paf.im/Dt5Ol