AWstats на Debian с Nginx + php-fpm

Дмитрий Корнев
31 августа 2016

AWStats — серверная программа, анализирующая log-файлы сайтов и собирающая статистику в удобные для просмотра отчёты. В отличие от Munin, здесь основное внимание уделяется именно сайтам. В отчётах можно видеть их посещаемость за разные промежутки времени, популярные страницы и т.д.

Для меня AWStats оказался полезным, когда потребовалось собирать статистику по корпоративным сайтам, размещённым в локальной сети организации. В данном случае было неприемлемо отдавать заголовки страниц и другие данные разным онлайн-сервисам, вроде Яндекс.Метрики или Google Analytics. AWStats работает на сервере, в интернет не лезет, ничего не требует. Не нужна даже база. По умолчанию программа анализирует логи сайтов раз в 10 минут, сохраняя все нужные для отчётов данные в виде файлов.

Данное руководство проверенно на Debian 8. Предполагается, что у вас настроен уже веб-сервер с использованием Nginx + php-fpm. Для каждого сайта на сервере отдельно генерируются стандартные файлы логов Nginx, типа таких:

/var/log/www/d1mon.com/access.log
/var/log/www/d1mon.com/error.log

Программе AWStats для анализа нужны access-файлы.

Устанавливаем AWStats:

apt-get install awstats

При этом в крон /etc/cron.d/awstats сразу прописывается автозапуск скриптов, при необходимости можете изменить временные интервалы. Настройки AWStats находятся в папке /etc/awstats. Здесь в качестве примера есть файл awstats.conf. Для каждого сайта на сервере, для которого нужна статистика, вы должны создать на основе него свой отдельный файл конфигурации. Просто полностью копируем этот файл, задавая для него другое имя, включающее в себя домен сайта. Например, для d1mon.com это получится такой файл:

/etc/awstats/awstats.d1mon.com.conf

Редактируем этот файл. Важно следующее:

LogFile="/var/log/www/d1mon.com/access.log"
LogFormat=1
SiteDomain="d1mon.com"
DNSLookup=0
DirData="/var/lib/awstats/d1mon.com/"
HostAliases="www.d1mon.com"
Lang="ru"

В папке /var/lib/awstats/d1mon.com/ будут генерироваться файлы с данными. Это ещё не сами отчёты, а лишь подготовленные для них данные. Эту папку вам нужно создать, если её нет. Также нужно установить на неё правильные права, по умолчанию требуется пользователь www-data и одноимённая группа. Смотрите крон-файл, используя какого пользователя запускаются скрипты. Запускаем для проверки анализ логов вручную:

/usr/bin/perl /usr/lib/cgi-bin/awstats.pl -update -config=d1mon.com

Если всё в порядке, то в ответ получим примерно такое:

Create/Update database for config "/etc/awstats/awstats.d1mon.com.conf" by AWStats version 7.2 (build 1.992)
From data in log file "/var/log/www/d1mon.com/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: 12591
 Found 0 dropped records,
 Found 0 comments,
 Found 0 blank records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 12591 new qualified records.

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

/usr/lib/cgi-bin/awstats.pl -config=d1mon.com -update -output > /var/www/d1mon.com/awstats.html

В данном случае предполагается, что файлы сайта d1mon.com расположены в папке /var/www/d1mon.com/ и мы в эту папку сохраняем файл awstats.html. Теперь файл можно открыть браузером. Это получился базовый отчёт. Чтобы создать все отчеты используется команда:

/usr/share/awstats/tools/awstats_buildstaticpages.pl -update -config=d1mon.com -dir=/var/www/d1mon.com/ -awstatsprog=/usr/lib/cgi-bin/awstats.pl > /dev/null

Чтобы не засорять основную папку сайта стоит указывать для генерации отчётов какую-нибудь отдельную папку. На неё в случае необходимости можно установить пароль. Эту команду можно сохранить в какой-нибудь файл, типа /home/user/awstats.sh и запускать его просто потом, когда будет нужно. Автоматизировать запуск этого файла лучше не через крон, а через Logrotate. В файл /etc/logrotate.d/nginx, или в тот который у вас используется для ротации логов Nginx, добавляем:

/var/log/www/d1mon.com/*.log {
 daily
 ...
 sharedscripts
 prerotate
 /home/user/awstats.sh
 endscript
 ...
}

В этом случае генерация отчётов AWStats будет происходить перед обработкой логов программой Logrotate, что гарантирует обработку точно вовремя и без любых потерь данных. Чтобы всё случилось Logrotate для проверки можно запустить вручную:

logrotate -vf /etc/logrotate.conf

Ну и последний штрих. Когда все отчёты генерируются, то там не создаётся индексный файл. Вместо него файл с таким именем:

awstats.d1mon.com.html

Можно добавить такое название файла к числу индексных файлов в настройки Nginx для соответствующего сайта. Можно ограничится только одной подпапкой:

location /awstats/ {
    index awstats.d1mon.com.html;
}

2 комментария

Дм
а как включить чтоб обновлялась статистика не раз в сутки а каждый час такое возможно где править и что спасибо
В статье ведь есть про /etc/cron.d/awstats. Здесь есть про то, как редактировать подобные файлы https://d1mon.com/n/1270