Wyświetlanie statystyk dostępu do witryn www przy użyciu AWStats
Jak skonfigurować AWStats w celu monitorowania statystyk dostępu do witryn WWW na serwerze Gentoo Linux.
Osoby poddejmujące decyzje biznesowe lubią opierać swój osąd na statystykach. W sieci można znaleźć wiele usług, które pomagają zebrać i zaprezentować statystyki dostępu do witryny internetowej w przyjazny a co najważniejsze łatwy do ogarnięcia sposób. Najpopularniejsze usługi jak Google Analytics opierają swoje działanie głównie na API Javascript ukrytym na stronie. W związku z tym usługi te mogą być niezykle prosto zablokowane przez osobę odwiedzającą wirtynę internetową. Tak naprawdę wiekszość dodatków podwyższających bezpieczeństwo przeglądarek zablokuje możliwość działania takich usług w ramach swoich ustawień domyślnych. Więc co zrobyć aby mieć dostęp do prawdziwych statystyk dostępu do twojej witryny. Należy polegać na logach twojego serwera. Informacje przechowywane tam nie mogą być zablokowane. Jeśli ktoś pobiera coś z twojej strony informacja na ten temat zostanie zapisana w logach, bez względu na to jakich zabezpeiczeń odwiedzający używa. Na moich serwerach wykorzystuję świetny program przetwarzający logi serwera WWW o nazwie AWStats, który pozwala mi zaprezentować statystyki dostępu do strony w bardzo przyjazny sposób.
Znajdziesz wiele artykułów dotyczących konfiguracji pakietu AWStats w różnych dystrybucjach Linuksa, niestety przekonałem się, że większość zamieszczonych tam informacji nie byłą przydatna dla mnie. Udało mi się skonfigurować AWStats w taki sposób jak sobie tego życzyłem wykorzystując fragmenty informacja pobrane z różnych źródeł, i chciałbym podzielić się moją konfiguracją, mając nadzieje, że ktoś inny uzna te informacje za użyteczne. Większość podanych tutaj informacji dotyczy dystrybucji Gentoo Linux, ale niektóre powinny dać się zastosować na dowolnej dystrybucji systemu Linux lub w innym systemie klasy Posix.
Rozpocznę od zdefiniowania założeń mojej konfiguracji. Jako, że publikuję kilka stron na moich serwerach, chciałem mieć oddzielnego wirtualnego hosta, która będzie prezentował statystyki wszystkich stron publikowanych na danym serwerze. Wyświetlanie statystyk dla każdej ze stron w odrębnej lokalizacji nie jest złym pomysłem, można by uzyskiwać dostęp do strony statystyk wykorzystując adres url podobny do tego http://www.adres_strony.org/awstats. Jednakże niektóre z witryn, którymi się opiekuje są zbudowane przy wykorzystaniu szkieletów takich jak Syfmony czy Ruby On Rails i mechanizm routingu szkieletu sprawia, że uzyskanie dostępu do strony w ten sposób byłoby na prawdę trudne do skonfigurowania. Zdecydowanie prościej jest utworzyć osobną witrynę zawierającą linki do wszystkich statystyk, do których chce mieć dostęp. Chciałbym dodatkowo ograniczyć dostęp do strony ze statystykami tylko do zalogowanych użytkowników i uzyskiwać dostęp do strony wyłącznie poprzez bezpieczne połączenie SSL.
Większość źródeł jakie udało mi się znaleźć w Internecie nie zawierała kompletnych informacji dlatego też chciałbym, aby moje informacje były w 100% wiarygodne (przynajmniej jeśli chodzi o dystrybucję Gentoo Linux), dlatego też rozpocznę od wymaganej kompilacji serwera Apache, następnie opiszę konfigurację AWStats i zakończę na konfiguracji strony i wirtualnych hostów.
Pierwsza rzecz do zrobienia to konfiguracja serwera Apache. Konfiguracja modułów powinna być zdefiniowana w Gentoo Linuksie w pliku /etc/make.conf. Jeśli chcesz mieć pewność, że będziesz w stanie wykorzystać AWStats zalecam dodanie tam definicji APACHE2_MODULES podobnej do tej
APACHE_MODULES="ssl alias log_config mime mime_magic unique_id vhost_alias threads authz_host auth_basic auth_default rewrite dir cgid"
Ta definicja jest typowa dla wielowątkowej konfiguracji serwera Apache, jeśli masz świadomość faktu, że twoja kompilacja apacha nie wykorzystuje:
APACHE2_MPMS="event"
lub:
APACHE2_MPMS="worker"
a zamiast tych wielołątkowych modułów wykorzystujesz:
APACHE2_MPMS="prefork"
upewnij się, że zastąpisz moduł cgid modułem cgi. Jest to absolutnie kluczowy moduł jako, że strona AWStats jest generowana przez skrypt cgi napisany w perlu.
Powyższa konfiguracja jest bardzo minimalistyczna i mówiąc prawdę wykorzystuję więcej modułów na moich serwerach ale inne moduły (na przykład proxy_balancer) nie mają wpływu na konfigurację AWStats. Możesz dostosować tę konfigurację aby odpowiadała twoim wymaganiom, możesz na przykład zamienić auth_basic na authnz_ldap aby wykorzystać uwierzytelnianie poprzez usługę ldap zamiast prostego uwierzytelniania, które ja wykorzystuję (wymagało by to także kompilacja serwera Apache ze wsparciem dla ldap). Jeśli twoja wiedza na temat modułów serwera Apache jest ograniczona odwiedź tę stronę i zapoznaj się z informacjami za co odpowiadają poszczególne moduły.
Kolejny krok to kompilacja Apache. Musiałem się upewnić, że Apache zostanie skompilowany ze wsparcie dla obsługi wątków i ssl'a. Powinno to być odblokowane domyślnie dla każdego serwerowego profilu, ale jeśli nie masz pewności zawsze możesz dodać flagi use threads i ssl do /etc/make.conf lub dodać je do pliku /etc/portage/package.use w ten sposób:
echo "www-servers/apache ssl threads" >> /etc/portage/package.use
albo uruchomić komendę emerge tak:
USE="threads ssl" emerge www-servers/apache
Jeśli wcześniej wykorzystywałeś inną kompilację Apache, upewnij się, że wykonasz:
etc-update
lub
dispatch-conf
aby zaktualizować poprzednio utworzone pliki konfiguracyjne.
Powinieneś także odblokować wymagane opcje pracy serwera w pliku konfiguracyjnym usługi Apache2 /etc/conf.d/apache2. Moja konfiguracja wygląda analogicznie do tej:
APACHE2_OPTS="-D DEFAULT_VHOST -D SSL -D SSL_DEFAULT_VHOST
To pozwoli nam używać SSL i domyślnej konfiguracji wirtualnych hostów. To prawie wszystko co należy zrobić aby Apache był przygotowany do współpracy z AWStats.
Ostatnia rzecz to zmiana domyślnego formatu zapisu logów serwera na format, który AWStats będzie w stanie przetworzyć. Zamiast wykorzystania sugerowanego w dokumentacji AWStats formatu combided wykorzystałem podejście opisane przez Gentoo Linux Wiki (spójrz na listę źródeł w dolnej części artykułu). Wykorzystuje format vhost. Oczywiście odbije się to na konfiguracji AWStats. Dla każdej strony dostępnej przez protokół HTTP dodałem poniższe wpisy konfiguracji logów w definicji wirtualnego hosta:
ErrorLog /var/log/apache2/adres_strony-error_log CustomLog /var/log/apache2/adres_strony-access_log vhost
Dla każdej strony dostępnej przez protokół HTTPS dodałem poniższe wpisy konfiguracji logów w definicji wirtualnego hosta:
ErrorLog /var/log/apache2/adres_strony-error_log CustomLog /var/log/apache2/adres_strony-access_log vhost CustomLog /var/log/apache2/adres_strony-ssl-request_log "%t %h %{HTTPS}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %{SSL_CIPHER_USEKEYSIZE}x %{SSL_CLIENT_VERIFY}x \"%r\" %b"
Jeśli możesz uzyskać dostęp do strony wykorzystując zarówno protokół HTTP jak i HTTPS powinieneś wykorzystać jeden plik access_log w obu konfiguracjach. Upewnij się, że stworzysz odrębne pliki z logami dla każdej odrębnej witryny. W tym momencie konfiguracji możesz skasować lub wymusić rotację logów jako, że AWStats nie będzie w stanie parsować twoich starych logów (najprawdopodobniej były one stworzone przy użyciu niekompatybilnego formatu). Następnie uruchom ponownie Apacha wykonując następującą komendę:
/etc/init.d/apache2 restart
W ten sposób Apache stworzy nowe logi, które będą mogły być analizowane przez AWStats. Odwiedź swoje witryny aby mieć pewność, że jakieś informacje zostaną zapisane w logach. To już wszystko co należy zrobić w konfiguracji serwera WWW Apache.
Kolejny krok to instalacja AWStats. Ostatnia dostępna wersja w drzewie portage to AWStats-7.0, aby móc z niej skorzystać należy ją odmaskować wykonując następującą komendę:
echo "www-misc/awstats" >> /etc/portage/package.keywords
Następna rzecz jaką należy zrobić to wybór flag USE dla AWStats i jego zależności. AWStats posiada wsprarice dla apache2 vhost goeip i ipv6. Dodałem konfigurację flag use wykonując następujące komendy:
echo "dev-libs/geoip perl-geoipupdate" >> /etc/portage/package.use echo "www-misc/awstats -ipv6 geoip apache2 vhost" >> /etc/portage/package.use
Jak widzisz nie używam ipv6 na moich serwerach ale wykorzystuję geoip. W ten sposób AWStats bedzie mógł zidentyfikować kraj, z którego pochodzi osoba odwiedzająca stronę. Możesz zainstalować AWStats wykonując następującą komendę:
emerge www-misc/awstats
Teraz możemy stworzyć nowego wirtualnego hosta dla naszych statystyk. Aby tego dokonać w Gentoo wykorzystamy świetny skrypt nazwany webapp-config. Zainstalowałem AWStats w osobnym wirtualnych hoscie wykonując następującą komendę:
webapp-config -I -h awstats_host_name awstats 7.0
Utworzy ona nowy katalog w /var/www/ i skopiuje do niego wszystkie wymagane pliki. Możesz zajrzeć do tego katalogu i zobaczyć, że jest tam kilka skryptów cgi wewnątrz katalogu cgi-bin i trochę plików w katalogu htdocs. Kolejna rzecz to stworzenie pliku konfiguracyjnego AWStats dla każdej strony jaką monitorujesz.
Aby tego dokonać po prostu skopiuj przykładową konfiguracje pod nazwą, która będzie odpowiadała nazwie twojej witryny. Możesz tego dokonać wykonując następującą komendę:
cp /etc/awstats/awstats.model.conf /etc/awstats/awstats.adres_strony.conf
Teraz poddaj edycji ten plik wprowadzając w nim wymagane opcje konfiguracyjne. Moja konfiguracja wygląda podobnie do tej (podaje tylko linie konfiguracji, w których dokonałem zmian):
LogFile="/var/log/apache2/adres_strony-access_log" LogFormat="%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %other" SiteDomain="adres_strony" HostAliases="adres_IP adres_strony REGEX[adres_strony\.pl$]" DirData="../datadir" DirCgi="/var/www/awstats_host_name/cgi-bin" DirIcons="/awstatsicons" BuildReportFormat=xhtml #Zależnie od technologii wybierz index.php lub index.html DefaultFile="index.php" SkipHosts="127.0.0.1 localhost" Lang="pl" StyleSheet="/awstatscss/awstats_bw.css" LoadPlugin="geoip GEOIP_STANDARD /usr/share/GeoIP/GeoIP.dat"
Taraz można przetestować naszą konfiguracje wchodząc do katalogu cgi-bin wirtualnego hosta i uruchamiając awstats w ten sposób:
cd /var/www/awstats_host_name/cgi-bin ./awstats.pl -config=adres_strony -update
Jeśli w efekcie zobaczysz informacje podobne do tych:
Create/Update database for config "/etc/awstats/awstats.adres_strony.conf" by AWStats version 7.0 (build 1.970) From data in log file "/var/log/apache2/adres_strony-access_log"... Phase 1 : First bypass old records, searching new record... Direct access to last remembered record is out of file. So searching it from beginning of log file... Phase 2 : Now process new records (Flush history on disk after 20000 hosts)... Jumped lines in file: 0 Parsed lines in file: 92 Found 0 dropped records, Found 0 comments, Found 0 blank records, Found 0 corrupted records, Found 0 old records, Found 92 new qualified records.
oznacza to, że AWStats jest poprawnie skonfigurowany i możesz kontynuować. Jeśli napotkałeś problemy upewnij się że format logów Apache odpowiada formatowi logów zdefiniowanemu w konfiguracji AWStats.
Teraz należy się upewnić, że nasze statystyki będą aktualizowane okresowo. Dokonałem tego tworząc prosty skrypt w katalogu /etc/cron.hourly/ nazwany awstats:
#!/bin/sh cd /var/www/awstats_host_name/cgi-bin ./awstats.pl -config=adres_strony -update > /dev/null 2>&1
Powinieneś dodać podobną linię dla każdej witryny, która chcesz monitorować. Nie zapomnij uczynić tego skryptu wykonywalnym wykonując następującą komendę:
chmod +x /etc/cron.hourly/awstats
Musisz upewnić się także, że będzie przetwarzać logi na chwilę przez każdą ich rotacją. Aby tego dokonać należy dodać komendę prerotate do konfiguracji rotacji logów. Porównaj z przykładem pokazującym moją konfigurację rotacji logów dla plików z logami serwera Apache access_log zapisaną w pliku konfiguracyjnym /etc/logrotate.d/apache2.
/var/log/apache2/*access_log { daily missingok notifempty rotate 365 dateext olddir /var/log/old/apache2 sharedscripts nocompress nocreate prerotate /etc/cron.hourly/awstats endscript postrotate /etc/init.d/apache2 reload > /dev/null 2>&1 || true endscript }
Teraz jesteśmy już blisko końca konfiguracji. Należy już tylko sprawić aby statystyki pojawiły się w postaci strony internetowej. Aby tego dokonać stworzymy najpierw prostą stronę html pokazującą linki do naszych statystyk. Utwórz plik index.html w katalogu /var/www/awstats_host_name/htdocs o zawartości zbliżonej do tej:
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>AWSTAT Domain List</title> </head> <body> AWSTATS Page.<br /> <ul> <li><a href="/awstats/awstats.pl?config=my_site_address">My_Site_Address</a></li> </ul> </body> </html>
Dodaj odrębny link dla każdej strony, która monitorujesz. Ostatnia rzecz to sprawienie aby strona ta mogła się wyświetlać i zmuszenie pliku awstas.pl do działania w trybie skryptu cgi. Aby tego dokonać należy stowrzyć konfigurację wirtualnego hosta dla serwera Apache. W Gentoo konfiguracja wirtualnych hostów jest przechowywana w katalogu /etc/apache2/vhost.d/. Jak zaznaczyłem na początku artykułu chciałbym aby moja konfiguracja wymuszała odwiedziny strony ze statystykami wyłącznie przy użyciu bezpiecznego połączenia SSL. Pierwsza rzecz to stworzenie prostej konfiguracji wirtualnego hosta zawierającą regułę przepisania, która przekieruje użytkownika do połączenia SSL. Ta konfiguracja powinna wyglądać podobnie do tej:
<VirtualHost *:80> ServerAdmin admin@my_domain.org DocumentRoot /var/www/awstats_host_name/htdocs/ ServerName awstats_host_name.my_domain.org RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L] ErrorLog /var/log/apache2/awstats-error_log CustomLog /var/log/apache2/awstats-access_log vhost </VirtualHost>
Następnie musimy stworzyć odpowiednią konfigurację hosta dla połączenia SSL zawierającą wszystkie niezbędne parametry, które pozwolą nam wykorzystać skrypty cgi. Ta konfiguracja powinna przypominać tę zamieszczoną poniżej:
<VirtualHost *:443> ServerAdmin admin@my_domain.org ServerName awstats_host_name.my_domain.org UseCanonicalName On SSLEngine on SSLOptions StrictRequire SSLCertificateFile /etc/ssl/apache2/server.crt SSLCertificateKeyFile /etc/ssl/apache2/server.key SSLProtocol all -SSLv2 DocumentRoot /var/www/awstats_host_name/htdocs Alias /awstatsclasses "/var/www/awstats_host_name/htdocs/classes/" Alias /awstatscss "/var/www/awstats_host_name/htdocs/css/" Alias /awstatsicons "/var/www/awstats_host_name/htdocs/icon/" ScriptAlias /awstats "/var/www/awstats_host_name/cgi-bin/" <Directory "/var/www/awstats_host_name/htdocs"> Options -Indexes FollowSymLinks AllowOverride All AuthType Basic AuthName "AWStats Admin Access Required" AuthUserFile /etc/awstats/.htpasswd require valid-user Order allow,deny Allow from all SSLRequireSSL </Directory> <Directory "/var/www/awstats_host_name/cgi-bin"> Options ExecCGI -Indexes FollowSymLinks SetHandler cgi-script Order allow,deny Allow from all SSLRequireSSL </Directory> <Location /awstats> AuthType Basic AuthName "AWStats Admin Access Required" AuthUserFile /etc/awstats/.htpasswd require valid-user SSLRequireSSL </Location> ErrorLog /var/log/apache2/awstats-ssl-error_log CustomLog /var/log/apache2/awstats-access_log vhost CustomLog /var/log/apache2/awstats-ssl-request_log "%t %h %{HTTPS}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x %{SSL_CIPHER_USEKEYSIZE}x %{SSL_CLIENT_VERIFY}x \"%r\" %b" </VirtualHost>
Ostatnia rzecz to wygenerowanie pliku autoryzacyjnego. Możesz go utworzyć i dodać do niego pierwszego użytkownika wykonując następującą komendę:
htpasswd2 -c /etc/awstats/.htpasswd nazwa_użytkownika
i dodawać do niego kolejnych użytkowników wykonując komendę:
htpasswd2 /etc/awstats/.htpasswd nazwa_drugiego_użytkownika
I to wszystko. Możesz podziwiać statystyki i przeglądać jakie przeglądarki Internetowe są wykorzystywane do wyświetlenia twojej strony:
![AWStats Statistics](uploads/images/blog/Awstats01.jpg)
lub jakie typy zawartości są z niej pobierane:
![AWStats Statistics](uploads/images/blog/Awstats02.jpg)
lub analizować ruch na twojej stronie:
![AWStats Statistics](uploads/images/blog/Awstats03.jpg)
Te informacje są w 100% wiarygodne. Nie można powiedzieć tego samego o usługach śledzenia aktywności opartych o javascript.
Źródło:
- dokumentacja AWStats
- Artykuł na Gentoo Linux Wiki o AWStats .
- HowTo na Gentoo Linux Forum o AWStats
GNU Free Documentation License or Creative Commons Share Alike
Jeśli znalazłeś jakieś błędy w powyższej informacji lub po prostu chcesz wypowiedzieć swoje zdanie na jej temat, będę wdzięczny za pozostawienie komentarza.
Wszystkie komentarze będą pokazywać się na stronie po tym jak zostaną zatwierdzone. Przepraszam za to ale chcę mieć pewność, że moja strona będzie wolna od obraźliwych lub wulgarnych treści. Nie mam nic przeciwko krytyce ale zrób to właściwie dobierając słowa.
Trwa przetwarzanie komentarza.