Nastavit Webalizer samo o sobě není příliš náročné, ale byl jsem postaven před složitější úkol - nainstalovat Webalizer na webhostingový server a nastavit jej tak, aby vytvářel statistiky pro každou doménu zvlášť. Sám o sobě totiž takovou možnost nenabízí a tak jsem začal zkoumat, jak to obejít.
Možná se ptáte, proč zrovna Webalizer, když existuje mnoho jiných statistických nástrojů, které sledují to samé. Na přání uživatelů jsem před nějakou dobou byl také nucen vyměnit Webalizer za Awstats, ale mně osobně se Webalizer pozdával více. Zejména bych chtěl vyzdvihnout fakt, že je psaný v C a oproti Awstats v Perlu je to skutečně markantní rozdíl. Navíc koncept konfigurace je příjemnější a přínosným je také fakt, že generuje statické HTML stránky, se kterými se dá jednoduše manipulovat, protože stránky z minulých měsíců nejsou modifikovány. Awstats také nabízí podobnou možnost, ale za těchto podmínek s ním byly problémy a raději jsem ponechal generování stránek CGI perlovému skriptu. Pro FTP statistiky používám Webalizer i nadále.
Před samotnou konfigurací si nejdříve musíme promyslet, o co se vlastně budeme pokoušet. Pro náš případ je situace následující. Na serveru jsou desítky domén, každá má vlastní HTTP log ve /var/log/apache2 a soubory se jmenují domena.neco-acc.log. Pro FTP je log soubor společný /var/log/xferlog. Stránky chceme generovat do podadresářů ve /var/www/wstats, kde máme subdoménu a chceme si jednotlivé domény prohlížet z HTML indexu. Budeme také chtít, aby si každý uživatel domény mohl prohlížet své statistiky na adrese domena.neco/wstats. Cíl už máme jasný, teď se zbývá podívat na to, co máme k dispozici a co se dá ovlivnit.
Jak už jsem vzpomínal, Webalizer samotný možnost jako "generuj statistiky pro všechny logy v daném adresáři" nenabízí. Dají se však ovlivnit potřebné parametry - některé v konfiguračním souboru a některé i na příkazovém řádku pomocí přepínače. Potřebujeme tedy sestavit skript, který se bude systematicky starat o generování statistik pro všechny domény. Jistou překážkou je, že některé volby lze nastavit pouze v konfiguračním souboru. Skript bude muset proto vygenerovat i konfiguraci, a to pro každou doménu zvlášť.
V hlavě máme jasno, zbývá už jenom převést myšlenky do reality. Nejdříve si připravíme standardní konfigurační soubor /etc/webalizer.conf, aby obsahoval pouze volby shodné pro všechny domény - pak jej použijeme jako výchozí a pouze do něj přidáme řádky specifické pro jednotlivé domény. Konfigurace ve výchozím /etc/webalizer.conf bude jednoduchá - zakomentujeme všechny volby kromě voleb "PageType" - kde si nastavíme, jaké soubory má Webalizer považovat za internetovou stránku. Upravit si také můžeme HTML volby, dají se tak provést některé kosmetické úpravy na generovaných stránkách. Volbu "Quiet" bych doporučil pro testování vypnout a až se přesvědčíme o dobré funkčnosti, tak ji zapnout - jinak by z cronu chodily zbytečné maily. Možnosti "HideURL" můžeme nechat zapnuté a nastavené na výchozí hodnoty. Totéž platí pro volby "SearchEngine". Tím máme základní konfiguraci hotovou.
Nyní si musíme připravit skripty do cronu. Základním požadavkem je, aby se spouštěly jako první - naprostou nutností je jejich spouštění před logrotate nebo podobnou úlohou, která spravuje logy. Při umístění do adresáře /etc/cron.daily se toto dá vyřešit přejmenováním skriptu, aby začínal například na jedničku nebo jiné číslo, které je řazeno na začátku. Skripty budeme potřebovat dva - jeden pro HTTP a jeden pro FTP statistiky, ovšem odlišnosti budou minimální.
Podívejme se nejdříve na skript pro HTTP. Do proměnné OutputDir si nastavíme výstupní adresář pro statistiky, do ConfDir zase adresář pro uložení konfiguračních souborů pro jednotlivé domény. Jestli tyto adresáře neexistují, skript je vytvoří automaticky. Pak následuje zapsání HTML hlavičky pro soubor se seznamem domén - kdo chce, může si samozřejmě napsat alternativu v PHP, uložit ji do výstupního adresáře přímo a generování HTML ze skriptu vynechat. Pak následuje cyklus, ve kterém se projdou všechny log soubory, vezme se z nich název domény, dopíše HTML index a v případě neexistence konfiguračního souboru pro danou doménu se zkopíruje společný konfigurační soubor, do něhož se doplní nastavení specifické pro každou doménu. V případě, že pouštíte logrotate pouze jednou měsíčně nebo méně často, stačí ponechat pouze volbu "HistoryName", není potřeba používat inkrementální záznamy.
Pak se konečně spustí Webalizer s parametry pro název stránky, konfigurační soubor pro danou doménu, výstupní adresář pro doménu a její log soubor z Apache. Nakonec se v cyklu ještě vytvoří symbolický odkaz do adresáře stránek domény. Alternativou je přesměrování pomocí konfigurace Apache, to však nechám čtenářům v případě zájmu jako domácí úkol - pro každou doménu je totiž potřeba přesměrovat do jiného adresáře. Také je vhodné přidat pro statistiky ověření uživatele heslem přes Apache, například pomocí MySQL autentizačního modulu. To by si však vyžadovalo samostatný článek.
Po ukončení cyklu generování stránek ještě dopíšeme konec souboru pro HTML index, nastavíme práva souborů a je hotovo. Po ověření správné funkčnosti přidáme na konec skriptu "exit 0", aby zbytečně nechodily maily z cronu.
HTTP statistiky už fungují, teď zkusíme FTP. Skript funguje obdobně jako ten pro HTTP, s malými odlišnostmi. Názvy domén bere z výpisu adresáře /var/www, takže je nutné, aby byly adresáře domén vhodně pojmenovány - ve styly "domena.neco". Pak pro každou doménu separuje záznamy z xferlogu podle www adresáře domény do /var/log/ftpd. V cyklu se opět přidají volby do konfigurace Webalizeru, konkrétně soubor s historií a informaci, že se jedná o FTP log. Na závěr cyklu se spouští samotný Webalizer, opět s podobnými parametry jako při HTTP. Konec skriptu je shodný - zakončení HTML indexu a nastavení práv vygenerovaným souborům.
Doufám, že vám vše funguje - ještě bych chtěl upozornit na jednu maličkost. V případě změny výchozího konfiguračního souboru /etc/webalizer.conf je potřeba smazat soubory automaticky generované skriptem z adresářů /etc/webalizer/ftp a /etc/webalizer/http. V případě, že ručně upravíte konfiguraci pouze pro určitou doménu, skript soubor zachová a jakékoliv změny se v něm pak musí provést ručně.