Gerelateerde artikelen
Verwerken van AWstats bestanden
Armijn Hemel, 28 juli 2010, 193 views.
AWstats is een populair stuk software om logbestanden van webservers te analyzeren. De bestanden van AWstats zitten boordevol interessante informatie, waar je leuke dingen mee kan doen.
Tags: awstats, systeembeheer, web, webdevelopment
AWstats is een programma waarmee je interessante informatie uit logbestanden van Apache kan halen. Het is erg efficient in het verwerken van grote logbestanden. De data wordt door AWstats weggeschreven in een simpel formaat waarin een schat aan informatie over je website staat. Omdat AWstats jarenlang is doorontwikkeld is het erg snel en laten we het graag het zware tilwerk doen, waarna we de informatie die AWstats heeft verzameld makkelijk kunnen gebruiken. De informatie die AWstats uit de logbestanden haalt varieert van de gebruikte bandbreedte, de hoeveelheid hits op websites tot aan de zoekstrings die gebruikt worden in zoekmachines.
AWstats schrijft deze informatie weg in een apart bestand, typisch één per maand per domein. De plek op het bsetandsysteem kan verschillen, maar /var/www/awstats/ is vrij gebruikelijk. In het begin van het bestand staat een sectie met een lijst met daarin voor elke categorie waarover AWstats rapporteert de byte offsets binnen het bestand. Deze offset wijst naar de plek binnen het bestand waar de uitgebreide informatie gevonden kan worden, bijvoorbeeld:
POS_VISITOR 52400
Dit wiil zeggen dat het begin van de lijst met alle bezoeken gevonden kan worden op byte offset 52400.
Eén van de dingen die AWstats kan meten is hoeveel bytes er door Apache gestuurd wordt. Dit is voor ons belangrijke informatie, omdat we het gebruiken om in de gaten te houden hoe de bandbreedte op onze servers gebruikt wordt. Deze informatie schrijft AWstats weg in de sectie met dagelijkse rapporten. Door de juiste offset te vinden en binnen het bestand naar die offset te springen kunnen we deze data makkelijk ontsluiten.
Op deze positie staat een 'header', met daarin gespecifieerd voor hoeveel dagen er logs zijn:
BEGIN_DAY 19
Daarna volgt er per dag een regel met data (in dit geval dus 19). Een regel data ziet er zo uit:
20100501 768 1396 8933719 126
Het eerste nummer is overduidelijk de datum. De overige nummers staan voor de hoeveelheid pagina's die uitgeserveerd zijn, de hoeveelheid hits, de bandbreedte in bytes en het aantal unieke bezoekers.
Als je een script zou hebben om de bandbreedte van alle dagen in een maand zou meten (waarbij er één bestand per maand is), dan zouden we het volgende doen:
- zoek de offset in het bestand
- bepaal voor hoeveel dagen er data is
- zoek voor elke dag de juiste data op en tel de resultaten bij elkaar op
In Python kan je dat zo doen:
#! /usr/bin/python
import sys
total = 0
def processFile(filename):
tmptotal = 0
pos = 0
line = filename.readline()
while line:
try:
if line.split()[0] == "POS_DAY":
pos = line.split()[1]
break
except: pass
line = filename.readline()
pos = int(pos)
filename.seek(pos)
days = int(filename.readline().split()[1])
for i in range(1,days+1):
tmptotal += int(filename.readline().split()[3])
return tmptotal
for i in sys.argv[1:]:
awfile = open(i)
total += processFile(awfile)
print total
Je kan dit script uitvoeren met een commando zoals dit (waarbij het bovenstaande script is weggeschreven naar awstats.py):
$ awstats.py /path/to/awstatsfile
Op dit werk is een Creative Commons Licentie van toepassing.










