Statisitka spletnih obiskov za virtualne hoste na Synology NAS z Webalizer‐jem
Pred slabim letom dni je potekla domena akvazin.si, pa sem jo kupil, saj sem jo nekoč že imel v lasti in me nanjo vežejo močna čustva. Prav tako sem si kupil domeno blaz.at, z namenom krajšanja linkov na Twitterju, pa mi je zaradi kombinacije blaz.at/home postala zelo všeč.
Seveda je bilo za to, da so te strani delovale, potrebno narediti virtualne hoste v nadzorni plošči DSM (o čemer sem že pisal), in za vodenje statistike obiskov sem uporabljal Googlovo analitiko.
Ker pa ata Googla ne maram, sem se odločil, da bom poskusil z Webalizerjem, za katerega obstaja tudi paket za Synology DSM in ga je enostavno naložiti. Trije kliki in bil je nameščen in vklopljen.
Počakal sem nekaj dni in preveril kako kaže s statistiko, pa sem bil takoj razočaran. Vse spletne strani so bile zmetane v en koš in tako je bila statistika praktično neuporabna. Zato sem začel iskati ali lahko Webalizer kako prepričam, da bo delal statistiko za vsak virtualni host posebej. Izkaže se, da se z malo truda to da narediti.
Pa začnimo na začetku, z namestivijo Webalizerja. To storimo v Package Centru, najdemo pa ga med Utilities.
Žal sam Webalizer paket nima nobenih opcij, zato moramo vso konfiguracijo opraviti v ukazni vrstici.
$ ssh root@nas_IP_address
Najprej kreirajmo nekaj map, ki jih bomo kasneje potrebovali za delovne datoteke Webalizerja.
$ mkdir /var/lib/webalizer
$ mkdir /etc/webalizer
Sledijo mape za izdelane statistike za posamezne virtualne hoste.
$ mkdir /var/services/web/vhost1
$ mkdir /var/services/web/vhost2
Nato kopiramo privzeto konfiguracijo (ki je uporabljena za splošno statistiko) v /etc/webalizer za vskega virtualnega hosta posebej.
$ cp /var/packages/Webalizer/target/webalizer.conf /etc/webalizer/vhost1.conf
$ cp /var/packages/Webalizer/target/webalizer.conf /etc/webalizer/vhost2.conf
Nato uredimo tako dobljene konfiguracijske datoteke in spremenimo najmanj naslednje parametre:
LogFile
OuputDir
HistoryName
IncrementalName
HostName
Primer za vhost1.conf:
$ vi /etc/webalizer/vhost1.conf
LogFile /var/log/httpd-vhost1.log
OutputDir /var/services/web/vhost1
HistoryName /var/lib/webalizer/vhost1.hist
IncrementalName /var/lib/webalizer/vhost1.current
HostName www.vhost1.com
Sledi dodajanje parametrov za log datoteke za vsakega virtualnega hosta. Te podatke najdemo v datotekah /usr/syno/etc/httpd-vhost.conf-user ter /usr/syno/etc/httpd-ssl-vhost.conf-user. Ena je za HTTP, druga za HTTPS. Med oznake <VirtualHost *:80> in </VirtualHost> vrinemo naslednjo kodo.
CustomLog "|/var/packages/Webalizer/target/bin/rotatelogs /var/log/httpd-vhost1.log 10" combined
Kjer pazimo, da ime log datoteke (httpd-vhost1.log) ustreza imenu virtualnega hosta (podatek ServerName).
Sledi restart Apache strežnika, da se nove nastavitve uveljavijo.
$ /usr/syno/etc.defaults/rc.d/S97apache-user.sh restart
Vsak obisk virtualnega spletnega strežnika bo od tega trenutka dalje povzročil nov zapis v ločene log datoteke, kar je pogoj za izdelavo ločenih statistik.
V nadaljevanju moramo v rednih intervalih kreirati oz. obdelati statistiko za tako nastale log datoteke. V originalu Webalizer v ta namen uporablja cron oz. zapis v /etc/crontab datoteki in zapis se glasi:
13 * * * * root /var/packages/Webalizer/target/bin/webalizer -c /var/packages/Webalizer/target/webalizer.conf
Ker sem se odločil, da bom obstoječe stanje spreminjal minimalno kot je mogoče, sem za potrebe izračunov statistike za virtualne hoste dodal nov zapis v crontab:
20 * * * * root /var/packages/Webalizer/scripts/webalizer
Seveda ukaz /var/packages/Webalizer/scripts/webalizer v originalu ne obstaja, je skripta, ki se glasi:
$ vi /var/packages/Webalizer/scripts/webalizer
#!/bin/sh
lockfile="/tmp/webalizer.lock"
# bail out if lock file still exists
if [ -f $lockfile ]; then
echo "Lock file exists! Webalizer may still be crunching numbers!"
exit 1
else
# write the lock file
date +"%d.%m.%Y - %H:%M" > $lockfile
for i in /etc/webalizer/*.conf; do /var/packages/Webalizer/target/bin/webalizer -c $i; done
# delete the lock file
rm -rf $lockfile
fi
exit 0
Poskrbimo še za ustrezne pravice, da postane datoteka izvedljiva.
$ chmod +x /var/packages/Webalizer/scripts/webalizer
Ta skripta je srce preračunov statistike za vse virtualne hoste, ki imajo v mapi /etc/webalizer svojo konfiguracijsko datoteko.
Sledi še restart cron-a in statistike se bodo računale avtomatično!
$ /usr/syno/etc/rc.d/S04crond.sh stop
$ /usr/syno/etc/rc.d/S04crond.sh start
UPDATE: spreminjanje crontab ni všeč DSM
Svoj NAS zelo redko restartam, ponavadi, ko so na voljo varnostni popravki (ki jih je bilo v zadnjem času kar precej). Zato nisem takoj opazil, da se spremembe v datoteki /etc/crontab izničijo, ko restartamo NAS.
Zato sem se odločil, da za izdelavo statistik uporabim kar Task Scheduler v Control Panel, ki pa tudi uporablja crontab.
OPOMBA: Kasneje sem našel tale članek, ki opisuje točno to ugotovitev.