Настройка awstats под ubuntu и debian для apache2

Написано 14 Октябрь, 2011 в категории Linux,Ubuntu/Debian/Mint

Если вы читаете эту статью, значит вы знаете что такое ubuntu/debian, apache2 и видимо у вас возникла жгучая потребность настроить awstats. Настраивал для системы

stasyak@moon:~$ uname -a
Linux moon 2.6.38-11-generic #50-Ubuntu SMP Mon Sep 12 21:17:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
stasyak@moon:~$ apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built:   Sep  1 2011 09:31:14

Версия awstats - 6.95
Все ниже сказанное будет справедливо и для некоторых других версий ubuntu и для некоторых версий debian, но тут как обычно - без гарантий :)
А сейчас безо всяких предупредительных выстрелов. Шаг намбер ван - ставим и настраиваем awstats. Шаг намбер ту - закрываем его от посторонних глаз.

Шаг 1.

Ставим awsats:

stasyak@moon:~$ sudo apt-get install awstats

Отлично пол дела сделано.

Теперь настроим статистику для нашего сайта. Настройки awstats традиционно находятся в /etc/awstats/ .
Для каждого сайта должен быть свой конфиг в формате awstats.<выш сайт>.conf. В качестве эталона можно взять awstat.conf. Создаем для нашего сайта конфиг:

stasyak@moon:~$ sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.stasyak.ru.conf

Теперь все настройки awstats для сайта stasyak.ru хранятся в awstats.stasyak.ru.conf . ВАЖНО: между "awstats." и ".conf" должно быть полное название сайта! Теперь укажем свои значения для некоторых параметров.
1. Откуда будем брать статистику для сайта? Ну конечно из лог-файлов apache2, если быть точнее то из access.log для вашего сайта. Если вы специально для вашего сайта не настраивали логи, то скорее всего они будут складываться в общий лог, у меня общий лог находится в /var/log/apache2/access.log, но для сайта я пишу все логи в /var/log/apache2/stasyak.ru-access.log , для этого в описании виртуального хоста у меня такая вот строка

CustomLog /var/log/apache2/stasyak.ru-access.log combined

Указываем этот путь в качестве значения параметра LogFile в настройках /etc/awstats/awstats.stasyak.ru.conf. Ну как-то так:

LogFile /var/log/apache2/stasyak.ru-access.log

и получаем статистику за пару последних дней, хотя лог пишется уже неделю. Удивляемся и лезем смотреть логи. Первый же взгляд на логи рождает догадку:

stasyak@moon:~$/var/lib/awstats# ll /var/log/apache2/stasyak.ru-access.log*
-rw-r----- 1 root adm  150K Окт 17 11:45 /var/log/apache2/stasyak.ru-access.log
-rw-r--r-- 1 root root 155K Окт 16 05:24 /var/log/apache2/stasyak.ru-access.log.1

apache2 по-умолчанию ротирует логи (честно говоря, понятия не имею по какому принципу он это делает).
Поэтому надо указать awstats, что логов несколько:

LogFile="/usr/share/awstats/tools/logresolvemerge.pl /var/log/apache2/stasyak.ru-access.log* |"

2. Параметр LogFormat указывает awstats как интерпретировать лог. Есть предустановленные форматы для лог-записей, например для Apache2 (конечно, если вы ничего не меняли специально) можно просто указать:

LogFormat = 1

3. Указываем название сайта, для которого будем считать статистику и его алиасы (в том числе те доменные имена где настроен 301 редирект). В принципе ничего страшного если вы не укажете алиасы, но статистика в этом случае скорее всего будет не очень полная.

SiteDomain="stasyak.ru"
HostAliases="www.stasyak.ru"

4. Ну и как человек в основном русскоязычный я настроил отображение русского языка:

Lang="ru"

/etc/awstats/awstats.stasyak.ru.conf настроен!

Теперь сделаем ряд магических действий:
В директорию /etc/apache2/conf.d/ добавим файл awstats.

stasyak@moon:~$ touch /etc/apache2/conf.d/awstats

и записываем туда, вот такую вот мантру

Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /stats/ /usr/lib/cgi-bin/
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch

Теперь нам доступна статистика по адресу http://stasyak.ru/stats/awstats.pl
Все хорошо, только там ничего нет :)
А все дело в том, что awstats хранит статистику в своем внутреннем, удобном для отображения формате. Итого, на данный момент мы имеем логи apache2 и пустое хралище статистики awstats. Что нужно сделать? Конечно распарсить логи! А делается это так:

stasyak@moon:~$ sudo /usr/lib/cgi-bin/awstats.pl -config=stasyak.ru -update
Create/Update database for config "/etc/awstats/awstats.stasyak.ru.conf" by AWStats version 6.95 (build 1.943)
From data in log file "/usr/share/awstats/tools/logresolvemerge.pl /var/log/apache2/stasyak.ru-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: 1418
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 1418 new qualified records.

Строчка "Found 1418 new qualified records." подтверждает, что мы все сделали правильно.
Необходимо периодически парсить логи apache2, добавляя статистические данные для awstats. Для этого воспользуемся планировщиком cron:

stasyak@moon:~$ sudo nano /etc/crontab

и добавим строчку

*/30 * * * * root /usr/lib/cgi-bin/awstats.pl -config=stasyak.ru -update >/dev/null

статистика будет обновляться 2 раза в час, например в 13:00, 13:30, 14:00 и тд
Запускаем http://stasyak.ru/stats/awstats.pl и изучаем статистику! Сразу скажу что пункт "Добавить в закладки (предполагаемый)" использует некорректный алгоритм подсчета.
Расположение базы со статистикой задается параметром DirData в /etc/awstats/awstats.stasyak.ru.conf
Ответы на многие актуальные вопросы по работе с awstats можно посмотреть тут http://awstats.sourceforge.net/docs/awstats_faq.html

Шаг 2. Базовая авторизация.
Базовая авторизация необходима для того, чтобы скрыть статистику от посторонних глаз. Т.е. нам нужно чтобы при запросе статистики по адресу http://stasyak.ru/stats/awstats.pl выскакивало окошко с предложением ввести логин и пароль. И если они введены верно, то показываем статистику, а если нет то показываем страничку c ошибкой.
1. Кладем в директорию /usr/lib/cgi-bin/ файлик .htaccess вот с таким текстом

AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/passwd
Require valid-user

2. Генерируем пару логин-пароль

htpasswd -nmb login password

Естественно логин и пароль необходимо указать свои (произвольно).
Ну вот и все готово. У этого решения есть недостатки, например таким образом мы повесили базовую авторизацию на все скрипты в директории /usr/lib/cgi-bin/. Кроме того такой подход работает по принципу есть доступ/нет доступа.

http://kurapov.name/rus/technology/web/basic_auth_htaccess/
http://www.firststeps.ru/html/tutor/r.php?18
http://httpd.apache.org/docs/2.0/howto/auth.html