Outils pour utilisateurs

Outils du site


admin-systeme:apache-data-from-log

Apache Log : Générer un rapport simple

Introduction

L'idée ici est d'extraire quelques infos depuis les logs Apache comme le nombre de requêtes, le nombre de d'IP uniques, etc.

Voici un exemple de rapport pour les logs de RSSBridge.org.

APACHE LOG REPORT
==============================
Total number of requests:
  11323555
Unique IP
  220492
==============================
TOP 5
45569 --- 188.X.X.X
27484 --- 65.X.X.X
27000 --- 65.X.X.X
19979 --- 220.X.X.X
16648 --- 84.X.X.X

Procédure

L'idée est de créer un nouveau fichier qui contient le nombre de requête effectuée par chaque IP.

Pour cela, j'utilise la commande suivante :

awk '{ print $1 } ' apache.log | sort | uniq -c | sed -r 's/^[ \t]*([0-9]+) (.*)$/\1 --- \2/' | sort -rn

Je m'empresse d'expliquer ça :

  • awk : ne conserve que les adresse IP.
  • sort : trie les adresse IP.
  • uniq -c : supprime les doublons, et affiche le nombre de doublons qu'il y a avait à l'origin pour chaque IP.
  • sed : supprime les espace en début de ligne et ajoute entre le nombre de requête et l'adresse IP (cela permet d'effectuer le tri numérique correctement ensuite).
  • sort -rn : trie numériquement les entrées, du plus grand au plus petit.

On se retrouve donc avec les IP ayant effectuées le plus de requêtes en début de fichier.

Script

Voici un script tout simple générant le rapport montré en introduction.

apache_report.sh
#!/bin/bash
 
LOG_FILE=$1
REPORT_FILE=$2
OUTPUT_FILE=$3
 
NB_TOT_RQ=`wc -l "${LOG_FILE}" | awk '{ print $1 }'`
awk '{ print $1 } ' ${LOG_FILE} | sort | uniq -c | sed -r 's/^[ \t]*([0-9]+) (.*)$/\1 --- \2/' | sort -rn > $OUTPUT_FILE
NB_IP=`wc -l "${OUTPUT_FILE}" | awk '{ print $1 }'`
 
echo "APACHE LOG REPORT"					>  $REPORT_FILE
echo "=============================="		>> $REPORT_FILE
echo "Total number of requests:"			>> $REPORT_FILE
echo "  ${NB_TOT_RQ}"						>> $REPORT_FILE
echo "Unique IP"							>> $REPORT_FILE
echo "  ${NB_IP}"							>> $REPORT_FILE
echo "=============================="		>> $REPORT_FILE
echo "TOP 5"								>> $REPORT_FILE
head -n 5 $OUTPUT_FILE						>> $REPORT_FILE
admin-systeme/apache-data-from-log.txt · Dernière modification: 2013/12/08 13:37 par Arthur Hoaro