Instalacja AWStats na Debianie (z Apachem)

AWStats to narzędzie do analizy logów serwera WWW (a także FTP i e-mail, ale to mnie akurat nie interesowało), udostępniające bogate statystyki w całkiem przejrzystej, graficznej formie. Korzystam z Debiana w gałęzi stabilnej, który udostępnia AWStats w swoim repozytorium, liczyłem zatem, że wystarczy zainstalować paczkę i wszystko pójdzie z górki. Okazało się, że instalacja z paczki i tak kończy się ręczną konfiguracją, i to włącznie z wprowadzaniem poprawek w automatycznym (?) konfiguratorze. Dlatego w końcu postanowiłem wszystko zrobić sam. Cały proces jest trochę skomplikowany, ale warto spróbować.

Instalacja

Zaczynamy od pobrania AWStats. Rozpakowane archiwum umieszczamy w katalogu /usr/local/awstats. U mnie uprawnienia po rozpakowaniu były cokolwiek śmieszne (dziwne UID-y i GID-y), więc szybko wykonałem:

# chown root:root -R /usr/local/awstats

Dostępny jest automatyczny konfigurator awstats_configure.pl, jednak nauczony doświadczeniem, proponuję wykonać zadanie za niego.

Najważniejsze jest dodanie wpisów do konfiguracji Apache, by ten mógł serwować wyniki. Tworzymy plik /etc/apache2/awstats.conf:

Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"

<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Plik ten dołączamy do konfiguracji serwera, dopisują w /etc/apache2/apache2.conf:

Include /etc/apache2/awstats.conf

Konfiguracja hostów

Teraz przystępujemy do konfiguracji ustawień poszczególnych witryn. Tworzymy katalog /etc/awstats i umieszczamy tam szablon:

# cp /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf /etc/awstats/awstats.conf
# chmod u+w /etc/awstats/awstats.conf

Plik /etc/awstats/awstats.conf posłuży nam za szablon dla konfiguracji poszczególnych wirtualnych serwerów. Najważniejsze, by poniższe opcje miały odpowiednią wartość:

LogFile="/var/log/apache2/access.log"
LogType=W
LogFormat=1
DirIcons="/awstatsicons"

Teraz kopiujemy konfigurację dla naszego hosta. Przyjmijmy, że strona dostępna jest w domenie example.org i example.com.

# cp /etc/awstats/awstats.conf /etc/awstats/awstats.example.org.conf

W awstats.example.org.conf ustawiamy:

SiteDomain="example.org"
HostAliases="example.com"

Na koniec odświeżamy konfigurację:

# /etc/init.d/apache2 restart
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=example.com -update

Wyniki odwiedzin powinny być widoczne pod adresem example.org/awstats/awstats.pl. Oczywiście, wyświetlenie statystyk jest liczone jak każde inne wejście na stronę, dlatego warto dopisać w konfiguracji AWStats:

SkipFiles="REGEX[^\/awstats]"

Kłopoty ze wspólnym logiem

Jeżeli wszystkie wirtualne hosty logują do tego samego pliku, możliwe, że AWStats nie będzie potrafił przyporządkować ruchu do odpowiednich domen. W takim przypadku należy sprawdzić, jaki format logu stosują poszczególne hosty. U mnie było to:

CustomLog /var/log/apache2/access.log combined

W konfiguracji Apache'a (/etc/apache2/apache2.conf) należy zatem znaleźć opis tego formatu:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

i zamienić na:

LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

Teraz trzeba jeszcze zrestartować serwer i wyczyścić log /var/log/apache2/access.log (usunięcie tego pliku może skutkować wyłączeniem logowania). Jeżeli nie wyczyścimy logu, AWStats nie będzie chciał go czytać, bo nie będzie zgadzał mu się format.

W konfiguracjach hostów AWStats należy zmienić opcję LogFormat:

LogFormat="%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

Przy okazji warto zauważyć, że pustą opcję HostAliases AWStats dopełnia m.in. wartościami localhost 127.0.0.1. Podejrzewam, że to również może fałszować wyniki, warto zatem, mając pustą opcję HostAliases, skopiować tam wartość SiteDomain.

Teraz można odświeżyć dane w AWStats. Jeżeli chcemy usunąć stare, błędne dane, wystarczy usunąć odpowiedni plik *.txt w /usr/local/awstats/wwwroot/cgi-bin/.

Automatyczne odświeżanie statystyk

Aby statystyki aktualizowały się automatycznie co np. 15 minut, dodajemy zadanie do crona:

*/15 * * * * /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=example.org -update >/dev/null

Ponieważ podczas rotacji logów, możemy zgubić część danych, trzeba wcześniej wywoływać aktualizację. W tym celu edytujemy /etc/logrotate.d/apache2, dopisując odpowiednią opcję (tu wyróżnioną pogrubieniem):

/var/log/apache2/*.log {
        weekly
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        prerotate
                /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=example.org
        endscript
        postrotate
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
        endscript
}

By żyło się lepiej

W celu uproszczenia dostępu do statystyk, możemy dodać przekierowanie, dopisując w pliku /etc/apache2/awstats.conf np.:

RedirectMatch ^/statystyki[/]?$ /awstats/awstats.pl

Z kolei w celu utrudnienia dostępu osobom niepowołanym (statystyki zawiera pokaźną ilość informacji), możemy zabezpieczyć AWStats hasłem. Najpierw tworzymy plik z loginem i hasłem:

# htpasswd -c /usr/local/awstats/wwwroot/cgi-bin/.htpasswd nasz_login

Następnie edytujemy fragment /etc/apache2/awstats.conf:

<Directory "/usr/local/awstats/wwwroot">
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Prosze o login i haslo :P"
AuthType Basic
AuthUserFile /usr/local/awstats/wwwroot/cgi-bin/.htpasswd
require valid-user
</Directory>

Teraz pod adresem example.org/statystyki będziemy mogli obejrzeć logi, ale dopiero po podaniu hasła.

Nierozwiązane problemy

Tak naprawdę brakuje mi w AWStats jednej funkcji. Chciałbym mieć możliwość ustawienia opcji HostAliases na wartość w stylu example.net/org/, bowiem zdarza mi się, że podkatalog jednego z wirtualnych hostów, staje się później oddzielnym wirtualnym hostem i chciałbym śledzić wszystkie odwiedziny w jednym miejscu.

Komentarzy: 3 do „Instalacja AWStats na Debianie (z Apachem)“

  1. df komentuje:

    ja musialem uzyc stat ^/statystyki zamiast ^/statystyki[/]?$ dopiero wtedy przekierowanie dzialalo

  2. cnr.. komentuje:

    dzięki za ten wpis – + za świeże wersje, + za opis basic-auth, + za problem z rotowaniem logów, + za wszystko w jednym miejscu i + że działa (bo ‘awstats-configure’ to jakaś lipa) pozdrówk :)

  3. Miszek komentuje:

    Podobnie jak df miałem problem z tym statem jak zrobiłem taką składnie wtedy też zaczeło działać

Dodawanie komentarzy

XHTML: Możesz używać tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">