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;
}