Анализ логов веб сервера и представление статистики посещаемости веб сайта посредством AwStats
Нормальное явление, что каждый владелец веб сайта желает знать сколько людей к нему приходит на сайт, откуда приходит, что больше всего читает, сколько времени в целом проводит на сайте. Для удовлетворения такого любопытства было придумано масса средств для сбора статистики. Множество сервисов в Сети предлагает Вам поставить на своем сайте счетчик, который обычно представляет собой JavaScript и который, при входе посетителя на сайт, подгружается в его веб браузер и сообщает сервису статистики всю необходимую информацию о посетителе.
Но не всегда такая статистика точна. Дело в том, что многие посетители используют прокси серверы, которую в свою очередь могут запрещать передачу javascript’ов и попросту вырезают их при отдаче контента. Другие браузеры могут быть настроены на то, чтобы не загружать ничего лишнего, кроме самого контента с запрашиваемого ресурса… Статистика получается размытой и неточной.
Пожалуй, самый точный способ учета посетителей сайта - анализ логов веб сервера и подсчет всех необходимых параметров исходя из записей в них. Этот способ, правда, не предоставит Вам информации о том, какое разрешение экрана используют посетители, глубину цвета их мониторов, информацию о поддержке браузерами flash и java. Но зато Вы получите самую точную статистику количества уникальных посетителей, просмотров страниц и всего того, что фиксирует в логах Ваш веб сервер.
Существует несколько разных программ-анализаторов логов доступа к веб сайту. Я в своей практике использовал Webalizer и AWStats. Последний мне, честно говоря, понравился больше и я использую для самостоятельного подсчета статистики именно его. Про конфигурирование AWStats я и хотел бы рассказать.
Итак, - это открытое программное обеспечение, написанное на языке Perl, которое предназначено для распарсивания логов доступа к веб серверу и генерации отчетов, которые можно просмотреть в виде веб-страниц. Вообще, посредством AWStats можно собирать статистику не только веб сервера. AWStats также вполне способен распарсить логи почтового и ftp серверов. Но здесь эти варианты пока что рассматривать не будем.
Имеем сервер Apache и установленный perl 5.8.8 на операционной системе FreeBSD 6.3. От этого и будем отталкиваться. AWStats можно установить из коллекции портов.
# whereis awstats awstats: /usr/ports/www/awstats # cd /usr/ports/www/awstats # make install clean
Вылезет синее окошко, в котором будет предлагаться всего одна опция для установки: “Использование IPv6 протокола”. Я ее не отмечаю, ибо до IPv6 нам еще не скоро светит добраться. Жмем “ОК” и ждем окончания процесса установки.
По окончании вылезет сообщение, в котором будет краткая инструкция по подключению AWStats к нашему веб-серверу:
************************************************************** Please add the following to your apache config, and restart. # # Directives to allow use of AWStats as a CGI # Alias /awstatsclasses "%%PREFIX%%/www/awstats/classes/" Alias /awstatscss "%%PREFIX%%/www/awstats/css/" Alias /awstatsicons "%%PREFIX%%/www/awstats/icons/" ScriptAlias /awstats/ "%%PREFIX%%/www/awstats/cgi-bin/" # # This is to permit URL access to scripts/files # in AWStats directory. <Directory "%%PREFIX%%/www/awstats/"> Options None AllowOverride None Order allow,deny Allow from all </Directory> ************************************************************** If you are upgrading from AWStats 6.4 or older, please note the following: If you used the geoip plugin, you must edit your AWStats config file to change the line LoadPlugin="geoip GEOIP_STANDARD" into LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat" **************************************************************
Последний абзац в двух словах говорит нам о том, что можно использовать плагин GeoIP, который позволяет выдавать статистику по странам. Данная статистика собирается с помощью базы данных GeoIP.dat. Получить его можно установив программу GeoIP. Кстати, для использования возможностей GeoIP, хоть это и не написано, но нам также понадобится Perl модуль p5-Geo-IP, иначе AWStats не сможет использовать данную функцию. Устанавливаем:
# whereis p5-Geo-IP p5-Geo-IP: /usr/ports/net/p5-Geo-IP # cd /usr/ports/net/p5-Geo-IP # make install clean ... # whereis GeoIP GeoIP: /usr/ports/net/GeoIP # cd /usr/ports/net/GeoIP # make install clean
Все. Теперь все готово для того, чтобы приступить к конфигурированию нашего AWStats.
По-умолчанию, AWStats при установке копирует свои файлы в каталог /usr/local/www/awstats. В нем хранятся каталоги cgi-bin - в котором находится основной скрипт AWStats - awstats.pl; каталоги css, icons - для оформления генерируемых веб страниц и т.д. В настоящий момент нас будет интересовать файл /usr/local/www/awstats/cgi-bin/awstats.model.conf, который является основной моделью для построения конфигов awstats под Ваши сайты. Комментарии в файле начинаются так:
# AWSTATS CONFIGURE FILE 6.6 #-------------------------------------------------------------- # Copy this file into awstats.www.mydomain.conf and edit # this new config file to setup AWStats (See documentation # in docs/ directory). The config file must be in /etc/awstats, # /usr/local/etc/awstats or /etc (for Unix/Linux) or same # directory than awstats.pl (Windows, Mac, Unix/Linux...) # To include an environment variable in any parameter (AWStats # will replace it with its value when reading it), follow # the example: # Parameter="__ENVNAME__" # Note that environment variable AWSTATS_CURRENT_CONFIG is # always defined with the config value in an AWStats running # session and can be used like others. #--------------------------------------------------------------
Вообще, текущая версия AWStats - 6.7, тем не менее в дистрибутиве при установке из портов лежит конфиг для версии 6.6. Видать существенных отличий в этих версиях нет. Комментарии гласят: “Скопируйте этот файл в файл awstats.адрес_моего_сайта.conf и отредактируйте его для новой установки AWStats. (Почитайте документацию в каталоге doc/). Конфиг нового сайта следует поместить в один из следущих каталогов: /etc/awstats, /usr/local/etc/awstats или /etc (для Unix пользователей). Либо в ту же директорию, где лежит файл awstats.pl (для Windows, Mac, Unix…). Для включения переменных окружения с любыми параметрами (AWStats при чтении подставит им их значения), следуйте следущему шаблону: Parameter=”__ENVNAME__”. Учтите, что переменная окружения AWSTATS_CURRENT_CONFIG определена всегда согласно значению конфигурационного файла и может быть использована наравне с другими”.
Вобщем, поступаем здесь таким образом. Для начала создаем каталог /etc/awstats, выставляем на него соответствующие права и копируем в него файл конфигурации нашего сайта. Сайт называется test.daemony.org, а файлы сайта размещены в каталоге /usr/local/www/test.daemony.org/
# mkdir /etc/awstats # cp /usr/local/www/awstats/cgi-bin/awstats.model.conf /etc/awstats/awstats.test.daemony.org.conf # chmod -R o-rwx /etc/awstats && chown -R www:www /etc/awstats
Приступим к редактированию конфига, который сам по себе довольно немаленький. А потому, подробно я изложу здесь только его основную конфигурацию, дабы можно было awstats заставить работать.
Эта часть публикации доступна только зарегистрированным посетителям!
Пожалуйста, войдите [Login] или зарегистрируйтесь [Register].
Был показан пример основной конфигурации. С такими параметрами AWStats уже может быть запущен. Но я бы исправил еще несколько опций в дополнительных параметрах файла. В первую очередь подключим наш плагин GeoIP. Воспользуйтесь поиском по файлу и найдите в нем такую строку:
# LoadPlugin="geoip GEOIP_STANDARD /pathto/GeoIP.dat"
Раскомментируйте ее и укажите путь к файлу с базой GeoIP.dat. Обычно это выглядит так:
LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"
Еще следует подумать о том, что Вы будете также посещать свой сайт, причем гораздо чаще других посетителей, а потому может быть стоит исключить свой IP из статистики, дабы не портить ее? Я на собственном опыте убедился что эта мера не лишняя. Правда уже было поздно, но лучше поздно чем никогда. Ищем в конфиге строчку:
SkipHosts=""
и меняем ее на:
SkipHosts="server.myhome.com 192.168.0.75"
и так далее. Через пробел можно указывать IP адреса либо имена хостов заходы на сайт с которых не будут обсчитываться. Аналог этой опции:
SkipFiles=""
Только в данном случае из подсчета статистики исключаются определенные файлы сайта. Тоже не помешает, уж поверьте.
SkipFiles="/some/script-for-useronline-stat.php /admin.php"
Страницы также указываем через пробел. Можно использовать регулярные выражения.
Антипод опции SkipHosts - это:
OnlyHosts=""
Можно настроить awstats на обсчет статистики только с одного какого-то IP/хоста, указав в OnlyHosts=”" имя или IP адрес того хоста, которого будете обсчитывать. Можно использовать регулярные выражения.
Антипод опции SkipFiles:
OnlyFiles=""
Здесь наоборот можно настроить awstats на обсчет статистики только судя по загрузке какого-то одного или нескольких файлов. Можно использовать регулярные выражения.
Вот в принципе и все, что нужно поменять в основном конфиге AWStats. Если Вам не понравится стандартный стиль страницы статистики, Вы можете поменять в нем все, что угодно, редактируя соответствующие параметры.
Добавьте в конфигурационный файл веб сервера Apache httpd.conf в контейнер того виртуального хоста (test.daemony.org), для которого необходим обсчет статистики, следущие строки:
Alias /s/awstatsclasses "/usr/local/www/awstats/classes/" Alias /s/awstatscss "/usr/local/www/awstats/css/" Alias /s/awstatsicons "/usr/local/www/awstats/icons/" ScriptAlias /s/awstats "/usr/local/www/awstats/cgi-bin/" <Directory "/usr/local/www/awstats/cgi-bin/"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
И перезапустите Apache через apachectl restart. Создадим каталоги, в которых будут храниться файлы данных AWStats:
# mkdir /usr/local/www/test.daemony.org/htdocs/s/ # mkdir /usr/local/www/test.daemony.org/htdocs/s/awsdata/ # chown -R www:www mkdir /usr/local/www/test.daemony.org/htdocs/
Сделаем первый запуск AWStats из командной строки, для того, чтобы он смог сгенерировать первые отчеты и все необходимые для работы файлы. Делается это так:
# cd /usr/local/www/awstats/cgi-bin/ # ./awstats.pl -config="test.daemony.org"
В параметр -config подставляется именно имя сайта. AWStats сам найдет для него нужный конфиг. Если все прошло успешно, AWStats покажет сколько он записей нашел и сколько добавил в свою базу. При первом запуске может появиться ошибка о том, что не найдены некоторые файлы. Но это нормально. В последствии ненайденные файлы будут созданы и ругани не будет.
Проверьте каталог с данными AWStats - у меня это /usr/local/www/test.daemony.org/htdocs/s/awsdata/ - в нем должен после первого запуска появиться файл статистики. Его имя будет выглядеть в формате: “awstats%MM%YYYY.sitename.txt”. Имя содержит в себе информацию об отчетном периоде. Например: awstats012008.test.daemony.org.txt - говорит о том, что хранится информация о посещаемости сайта test.daemony.org за январь 2008 года.
Посмотреть статистику теперь можно будет по адресу Запоминать такой URL сложно, а потому для упрощения жизни положим в каталог /usr/local/www/test.daemony.org/htdocs/s/ файл index.html вот такого содержания:
<html> <head> <meta http-equiv="Refresh" content="0; url=awstats/awstats.pl"> <title></title> </body> </html>
Можно конечно и более красивое решение придумать, например, через mod_rewrite или просто php редирект использовать, но редирект HTML’ом будет работать на любом хостинге, даже на таком где отключен mod_rewrite и php.
Вот теперь другое дело. Запомнить адрес страницы статистики http://test.daemony.org/s/ гораздо проще. Пройдя по такой ссылке Ваш браузер будет перенаправлен по нужному URL к скрипту.
Не будем забывать о безопасности. Зачем демонстрировать всем подряд статистику Вашего сайта? Тем более, поскольку AWStats написан на Perl, отнести его к категории безопасных скриптов скорее нельзя, чем можно. Воспользуемся http авторизацией для того, чтобы давать доступ к статистике только по паролю для избранных пользователей. В простом виде это можно реализовать так.
Создаем каталог, в котором будет храниться файл с паролями, создаем пустой файл для паролей, выставляем все нужные права:
# mkdir /usr/local/www/test.daemony.org/pw/ # touch /usr/local/www/test.daemony.org/pw/stat.pwd # chmod -R o-rwx /usr/local/www/test.daemony.org/pw/ # chgrp -R www /usr/local/www/test.daemony.org/pw/
Теперь можно добавить пользователя в файл паролей. Для этого используем утилиту htpasswd, которая идет в комплекте вместе с Apache:
# cd /usr/local/www/test.daemony.org/pw/ # htpasswd site-stat Daemony New password: Re-type new password: Adding password for user Daemony
Закрываем на пароль директорию /usr/local/www/test.daemony.org/htdocs/s - добавим в .htaccess файл следущие директивы:
# На всяк случай запретим листинг директории Options -Indexes # Указываем путь к файлу с паролями пользователей # Следите, чтобы права на папки и файл позволяли # Apache читать его. AuthUserFile /usr/local/www/test.daemony.org/pw/stat.pwd # Файл с паролями групп пользователей нет. Директиву в null AuthGroupFile /dev/null # Текст, который отобразится в окошке ввода пароля в браузере. AuthName "Access Denied!" # Тип авторизации. Basic значит "открытый", "основной". # Кстати, пароли передаются в этом случае в открытом виде. AuthType Basic # Параметры использования файла паролей. # Нижеследущее указывает на то, что можно допускать любого # пользователя из файла с паролями. <limit GET POST> require valid-user </limit>
Таким же самым образом, следует защитить каталог /usr/local/www/awstats/cgi-bin/, иначе, при запросе http://test.daemony.org/s/ пароль будет запрашиваться, а при прямом обращении к скрипту по адресу http://test.daemony.org/s/awstats/awstats.pl не будет. Закрыть этот каталог, на мой взгляд, для большей безопасности лучше через httpd.conf. Добавим в контейнер с нашим VirtualHost‘ом test.daemony.org аналогичные строки в описание прав доступа к каталогу /usr/local/www/awstats/cgi-bin/.
<Directory "/usr/local/www/awstats/cgi-bin/"> Options Indexes FollowSymlinks MultiViews AllowOverride None Order allow,deny Allow from all AuthUserFile /usr/local/www/test.daemony.org/pw/stat.pwd AuthGroupFile /dev/null AuthName "Access Denied!" AuthType Basic <limit GET POST> require valid-user </limit> </Directory>
Перезапустим Apache. Теперь только пользователь Daemony с паролем, который ему установили, будет иметь доступ к статистике.
Для постоянного автоматического обновления статистики, можно добавить задание по запуску скрипта awstats.pl в /etc/crontab. Обновлять статистику можно настолько часто, насколько Вы сами пожелаете. Но я предпочитаю всего раз в час. Это оптимальный вариант, поскольку с опцией AllowToUpdateStatsFromBrowser=1 (включено) обновить статистику можно будет через браузер при необходимости в любое время.
### WHOME=/usr/local/www # 59 * * * * www $WHOME/awstats/cgi-bin/awstats.pl >/dev/null 2>&1
Вот теперь уж, пожалуй, точно все.
Вроде ничего не забыл?…
Ну, а вот так выглядит сама статистика AWStats (нажмите на скриншоты, чтобы увеличить; картинки будут открываться в новом окне):
Статистика AWStats | История за месяц
Статистика AWStats | По дням месяца
Статистика AWStats | По дням недели
Статистика AWStats | По часам
Статистика AWStats | Страны
Статистика AWStats | Роботы (Пауки) посетители
Статистика AWStats | Операционные системы
Статистика AWStats | Браузеры
Похожие публикации
Теги: apache, awstats, geoip, httpd, httpd.conf, perl, анализ логов, вебмастеру, диаграммы, конфигурация, лог, посещаемость, пример, русский перевод, статистика



Статистика конечно же хранится отдельно. Ведь логи Апача ежесуточно ротируются, и сохраняются архивированные логи за последний N дней/недель…
AwStats перечитывает текущий лог только раз, выбирает из них то, что ему нужно и откладывает отдельно в своих текстовых файлах в папке, указанную в конфиге под переменной “DirData”.
Вот, например, содержимое этой папки у меня:
у меня вопрос, если логи каждый месяц чистить, то, например, в июне будет статистика за март апрель? или логи перечитываються один раз и храниться отдельная база статистики?
vlav, твой комментарий заставил задуматься. Результаты размышлений здесь.
Похоже на то…
# Add here a list of kind of url (file extension) that must be counted as
# “Hit only” and not as a “Hit” and “Page/Download”. You can set here all
# images extensions as they are hit downloaded that must be counted but they
# are not viewed pages. URLs with such extensions are not included in the TOP
# Pages/URL report.
# Note: If you want to exclude particular URLs from stats (No Pages and no
# Hits reported), you must use SkipFiles parameter.
# Change : Effective for new updates only
# Example: “css js class gif jpg jpeg png bmp ico zip arj gz z wav mp3 wma mpg”
# Example: “”
# Default: “css js class gif jpg jpeg png bmp ico”
#
NotPageList=”css js class gif jpg jpeg png bmp ico swf”
про картинки наверно это?
50% - это слишком, конечно… Я бы сказал. на 20-30%.
Почему так? Несколько причин.
Пример первый. Ливинтернет и другие подобные сервисы обсчитывают посетителей, подсаживая в браузеры зашедшего на страницу свои JavaScript’ы. Многие пользователи ходят в Интернет через прокси. Например, у нас на работе сеть из 50 компьютеров. Все сотрудники ходят через прокси сервер на маршрутизаторе. На проксе порубаны все наиболее известные счетчики, и банерные сети. Счетчики и банеры просто не грузятся у тех, кто через нее работает. Соответственно, посещения на различных сайтах всех этих пользователей не обсчитываются. Но AwStats обсчитывает статистику, обрабатывая логи сервера напрямую. Это самое большое его преимущество, на мой взгляд.
Пример второй. Ты у себя на сайте поместил какую-то прикольную картинку. А кто-то у тебя на сайте ее нашел, она ему понравилась и этот “кто-то” на любимом форуме где он обычно тусуется взял и создал пост, в котором вставил картинку сославшись напрямую на твой сайт. Все посетители этого топика на форуме будут грузить эту самую картинку с твоего сервера, оставляя следы в логах твоего сайта. Соответственно, AwStats обсчитает эти “просмотры”. Конечно, это неправильно и портит статистику. Но я пока особо не заморачивался, как это пресечь.
Второй случай я наблюдал на собственном примере, когда этому блогу было две недели отроду. На каком-то форуме посетитель выложил картинку поздравляя “Всех с пятницей” :). При посещаемости (реальной) этого сайта на тот момент в 10-30 уников в сутки, после этого момента она “подскочила” до 200 - столько раз картинка из этого блога была просмотрена на том форуме. URL картинки пришлось заменить.
Список причин можно продолжить…
Ты забыл упомянуть вот это:
Хотел спросить - не знаешь почему австатс показывает всегда процентов на 50 больше хостов, чем например ливинтернет и другие счетцики?