{progz}

Látogatási statisztika az Apache access.log-ból, awk-kal

Az oldal tetején március óta van egy látogatásszámláló. Jól néz ki, de semmit nem mond. A tárhelyem viszont hozzáférést ad az Apache naplójához (access.log), és ebből néhány paranccsal sokkal több derül ki. Nem kell hozzá program, elég egy shell, és az awk, sort, uniq parancsok.

A formátum

Az Apache combined log formátumában egy sor így néz ki (a hosszú sort itt tördeltem):

84.2.xx.xx - - [09/May/2005:21:14:07 +0200] "GET /symbian.php HTTP/1.1" 200 21753
"http://www.google.hu/search?q=symbian+magyarositas" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Szóközökre bontva (és az awk alapból így bont) a fontos mezők: $1 az IP-cím, $4 a dátum, $7 a kért útvonal, $9 az állapotkód, $10 a méret, $11 a hivatkozó oldal. A böngésző azonosítója idézőjelek között több szóból áll, ezért azt mezőszámmal nem lehet megfogni. Arra a grep való.

Egysoros parancsok

Egyedi látogatók (IP-címek) száma:

awk '{print $1}' access.log | sort -u | wc -l

A tíz legnézettebb oldal, a képeket és a stíluslapokat kihagyva:

grep -v -E '\.(gif|jpg|png|css|js) ' access.log \
  | awk '{print $7}' | sort | uniq -c | sort -rn | head -10

Napi oldalletöltések:

awk '{print substr($4, 2, 11)}' access.log | uniq -c

A substr($4, 2, 11) a [09/May/2005:21:14:07 mezőből a 09/May/2005 részt vágja ki. Mivel a napló időrendben van, a uniq -c előtt itt nem kell rendezni.

Robotok nélkül (a legegyszerűbb szűrő):

grep -v -i -E 'bot|crawl|slurp|spider' access.log | awk '{print $1}' | sort -u | wc -l

Ami nem található (404), és hányszor kérték:

awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head -20

Honnan jönnek a látogatók (a saját domain nélkül):

awk '{print $11}' access.log | grep -v 'progz.hu' | grep -v '"-"' \
  | sort | uniq -c | sort -rn | head -20

Amit így megtudtam

A 404-es lista volt a legérdekesebb. Az oldal tavaly nyári átalakítása óta a régi .html címeket még mindig keresik: fórumokban, más oldalak linkgyűjteményeiben vannak rájuk mutató linkek. Ezek most mind hibaoldalra futnak. A javítás egyszerű, egy .htaccess fájl, amelyben a régi címek átirányítódnak az újakra:

Redirect 301 /symbian.html http://www.progz.hu/symbian.php
Redirect 301 /cikkek.html  http://www.progz.hu/cikkek.php

A 301 jelzi a keresőknek is, hogy a cím véglegesen elköltözött, így a régi linkek értéke átszáll az új oldalra.

Ha kényelmesebbet szeretnél

Az AWStats és a Webalizer ugyanebből a naplóból grafikonokat és táblázatokat készít, és sok tárhelyen már telepítve is vannak. Napi áttekintéshez ezek jobbak. Konkrét kérdésekre viszont (melyik régi link hoz még forgalmat, ki tölti le folyamatosan ugyanazt a fájlt) az egysoros parancs gyorsabb, mint keresgélni a menüben.