Помимо возможности управления сервером через веб-интерфейс, хорошо бы иметь хорошую статистику по веб-сайтам. Мой выбор пал на AWStats. AWStats представляет из себя анализатор лог файлов, который генерирует отчеты в HTML с таблицами и графиками. Так же AWStats интегрируется с Webmin, о котором я рассказывал в предыдущей статье.

Установка

Ставить AWStats я решил из портов. Так проще отслеживать изменения в версиях.

# cd /usr/ports/www/awstats/
# make install clean

В опциях установки предлагается включить поддержку IPv6. Лично мне это не надо — отключил. Если интересно почитать документацию, то она устанавливается в /usr/local/share/doc/awstats.

Настройка

Есть два способа настройки — ручной и с помощью скрипта. Быстренько расскажу про оба способа. Внимание! Если выбирается второй способ, то учтите, что файл конфигурации Apache надо будет все равно править потом руками, т.к. скрипт установки допускает в нем ошибку!!!

1. Настраиваем все сами

После установки, надо переименовать файл /usr/local/www/awstats/cgi-bin/awstats.model.conf в awstats.site.conf для настройки AWStasts. Так же надо добавить следующие строчки в файл /usr/local/etc/apache22/httpd.conf:

Alias /awstatsclasses "/usr/local/www/awstats/classes/"
Alias /awstatscss "/usr/local/www/awstats/css/"
Alias /awstatsicons "/usr/local/www/awstats/icons/"
ScriptAlias /awstats/ "/usr/local/www/awstats/cgi-bin/"

<Directory "/usr/local/www/awstats/">
   <Files "awstats.pl">
      AuthUserFile /usr/local/etc/apache22/passwd
      AuthGroupFile /usr/local/etc/apache22/group
      AuthName "Restricted Area For Customers"
      AuthType Basic
      require valid-user
   </Files>
   Options None
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>

Дальше надо перейти к следующему пункту, упустив всю установку скриптом.

2. Настраиваем с помощью скрипта

Так же есть более простой метод настройки — с помощью файла awstats_configure.pl. Но разработчики почему-то не учли, что данную программу люди будут ставить и на FreeBSD, где пути отличаются от дистрибутивов Linux. По этому, в скрипте есть недочеты, которые надо исправить. Данный файл находится в папке /usr/local/www/awstats/tools/. Прежде чем что-то запускать, надо отредактировать файл. Нужно удалить wwwroot в значениях переменных для всех директорий. Открываем awstats_configure.pl любым редактором и приводим следующие секции к такому виду:

# примерно строчки 327-330
$AWSTATS_ICON_PATH="$AWSTATS_PATH/icon";
$AWSTATS_CSS_PATH="$AWSTATS_PATH/css";
$AWSTATS_CLASSES_PATH="$AWSTATS_PATH/classes";
$AWSTATS_CGI_PATH="$AWSTATS_PATH/cgi-bin";

# примерно строчка 486
if ($_ =~ /Directory "$awstats_path_quoted"/) { $awstatsdirectoryfound=1; }

# строчка 530
<Directory "$AWSTATS_PATH">

# строчка 549
if (-f "$AWSTATS_PATH/cgi-bin/awstats.model.conf") {
$modelfile="$AWSTATS_PATH/cgi-bin/awstats.model.conf";

# и парой строчек ниже
if (! -s $modelfile || ! -w $modelfile) { $modelfile = "$AWSTATS_PATH/cgi-bin/awstats.model.conf"; }

Вот теперь мжоно запустить скрипт:

# cd /usr/local/www/awstats/tools/
# perl awstats_configure.pl

Сначала скрипт расскажет нам о преимуществах чтения документации, расскажет о том, что мы используем нестандартную папку (стандартная — /usr/local/awstast/) и спросит хотим ли мы продолжать. Соглашаемся. После этого надо будет ввести полный путь до конфигурационного файла Apache — /usr/local/etc/apache22/httpd.conf. Следующий вопрос — создавать ли новый конфиг для AWStats — да. Далее надо будет ввести ваш домен и путь, где будут храниться конфигурационные файлы AWStats (я указал /usr/local/etc/awstats/). Теперь скрипт скажет, что он еще не умеет добавлять задания в cron и предложит сделать нам это самим. Делается это вот так (первая команда — для одного конфига, вторая — для всех; выбрать надо одну):

# /usr/local/www/astats/cgi-bin/awstats.pl -update -config=stats.vcore.ru
# /usr/local/www/awstats/cgi-bin/awstats_updateall.pl now

Ну и последнее, что нам сообщит скрипт — это то, что конфигурационный файл был успешно создан, мы можем его сами редактировать. Так же, чтобы вручную обновить статистику для созданного сайта надо использовать команду:

# perl awstats.pl -update -config=stats.vcore.ru

Или же можно создать статические отчеты с помощью команды:

# perl awstats.pl -output=pagetype -config=stats.vcore.ru

Но и на этом еще не все. Надо еще подправить конфигурационный файл. Открываем /usr/local/etc/awstats/awstats.stats.vcore.ru.conf и вот что меняем:

# указываем правильный лог файл
LogFile="/var/log/httpd-access.log"

# разрешаем использовать DNS для замены ip-адресов именами
DNSLookup=1

# где хранится бд AWStats
DirData="/var/db/awstats"

# разные параметры для авторизации
AllowAccessFromWebToAuthenticatedUsersOnly=1
AllowAccessFromWebToFollowingAuthenticatedUsers="user1 user2"
AllowAccessFromWebToFollowingIPAddresses="192.168.0.3"

# плагин, отвечающий за подсказки
LoadPlugin="tooltips"
# плагин, отвечающий за правильное отображение UTF-строк
LoadPlugin="decodeutfkeys"
# инфо о хостах
LoadPlugin="hostinfo"

Создаем директорию /var/db/awstats и устанавливаем на нее нужные нам права:

# mkdir /var/db/awstats
# chown www:www /var/db/awstats

Редактируем файл /usr/local/etc/apache22/httpd.conf и приводим секцию Directory вот к такому виду (она в самом низу файла):

<Directory "/usr/local/www/awstats/">
   <Files "awstats.pl">
      AuthUserFile /usr/local/etc/apache22/passwd
      AuthName "Restricted Area For Customers"
      AuthType Basic
      require valid-user
   </Files>
   Options None
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>

Это нужно для того, чтобы использовать авторизацию для просмотра логов. Так же для удобства я создаю виртуальный хост stats.vcore.ru. Добавляем следующие строчки в файл /usr/local/etc/apache22/extra/httpd-vhosts.conf:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/usr/local/www/awstats"
ServerName stats.vcore.ru
ServerAlias www.stats.vcore.ru
</VirtualHost>

Чтобы создать файл с паролями, который будет использоваться для авторизации пользователей, надо воспользоваться следующей командой:

# htpasswd -c /usr/local/etc/apache22/passwd user

где user — это имя создаваемого пользователя.

Использование

Ок. Пришло время для первого тестового запуска. Для начала, надо создать или обновить базу данных AWStats. Запускаем скрипт awstats.pl, который находится в папке /usr/local/www/awstats/cgi-bin/:

# perl awstats.pl -config=stats.vcore.ru -update

Будет следующий вывод на экран:

Create/Update database for config "/usr/local/etc/awstats/awstats.stats.vcore.ru.conf"
From data in log file "/var/log/httpd-access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records 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: 4909
Found 0 dropped records,
Found 2 corrupted records,
Found 0 old records,
Found 4907 new qualified records.

dropped records — отвечает за те записи, которые не соответствовал формату, указанному в конфиг файле, или не являлись валидными HTTP-запросами
corrupted records — это записи, которые не соответствую параметру «LogFormat» в конфиг файле AWStats; обычно таких записей не больше 5% даже на хорошо настроенных серверах
old records — записи, которые уже были просмотрены при прошлом запуске скрипта
new qualified records — записи, которые были использованы для наполнения базы данных AWStats

Теперь можно cоздать и просмотреть отчеты. Для этого важно, чтобы база уже была создана и наполнена, что мы только что сделали. Страницы создаются следующим образом:

# perl awstats.pl -config=stats.vcore.ru -output -staticlinks > awstats.stats.vcore.ru.html

Ну, можно зайти на и посмотреть отчеты:

http://stats.vcore.ru/awstats/awstats.pl

Если, вдруг, на странице будет какая-то ошибка, связанная с недостающим модулем Perl Escape, то поставить его можно вот так:

# perl -MCPAN -e shell
# install URI::Escape

Интеграция с Webmin

1. Открываем Webmin, идем в раздел Webmin -> Webmin Configuration -> Webmin Modules
2. Открываем вкладку Install и указываем путь до файла awstats-x.x.wbm, который находится в папке /usr/local/www/awstats/tools/webmin/
3. Нажимаем кнопку Install Module
4. Открываем файл /usr/local/lib/webmin/awstats/defaultacl и редактируем там параметр dir:

dir=/usr/local/etc/awstats ~/awstats

Ссылки по теме

1. Официальный сайт AWStats
2. Страничка в Wikipedia (к сожалению, на английском)