Настройка awstats, nginx и logrotate
Дата: Сентябрь 5th, 2008 Автор: EugeneVC
Я уже четыре раза раза устанавливал связку awstas & nginx & logrotate и у меня сложилось более-менее внятное понимание работы этой троицы, о чём бы я и хотел рассказать. В первую очередь статья предназначена тем людям, которые решат использовать awstats & nginx на своих VDSи dedicated серверах.
Для начала, пара слов о том, как как я обычно организовываю структуру файлов веб-системы на сервере. Все сайты хранятся в каталоге /web, права на который даны пользователю web, из-под которого я и совершаю все операции с файлами и процессами сайтов. Так как все сайты мои, то схема с одним пользователем меня полностью устраивает. Для каждого сайта я пишу отдельные логи в каталог /var/log/www.
Для упрощения понимания последующего материала статьи, давайте условимся считать, что у нас есть сайт domain.com. Таким образом, все файлы сайта будут хранится в каталоге /web/domains.com, а логи посещений будут писаться в /var/log/www/domain.com-access.log.
Рассмотрим последовательно несколько шагов:
1)установка и конфигурирование awstats
2)автоматизация парсинга логов и построения отчётов
3)настройка nginx: формат логов, виртуальный хост для просмотра статистики
4)настройка logrotate.
Шаг 1. Настройка awstats.
Для начала было бы неплохо его установить. Для этого воспользуйтесь пакетным мэнеджером вашей системы и выясните, куда установился awstats. В случае FreeBSD он ставится в /usr/local/www/awstats. Я решил, что будет логично расположить awstats рядом с сайтами в катлоге /web, поэтому делаю символическую ссылку (пока делаем всё из-под root):
ln -s /usr/local/www/awstats /web/awstats
ln -s /usr/local/www/awstats /web/awstats
Создадим каталоги для конфигурационных файлов и статистики:
mkdir /web/awstats/etc
mkdir /web/awstats/data
mkdir /web/awstats/etc
mkdir /web/awstats/data
Создим ссылку на каталог с файлами конфигурации (которые мы создадим попозже):
ln -s /web/awstats/etc /usr/local/etc/awstats
ln -s /web/awstats/etc /usr/local/etc/awstats
Сделаем пользователя web владельцем каталога awstats
chown -R web:web /usr/local/www/awstats
chown -R web:web /web/awstats
chown -R web:web /usr/local/www/awstats
chown -R web:web /web/awstats
Дальнейшие операции будем делать из-под пользователя web.
Для каждого сайта awstats требует файл конфигурации. За основу можно и нужно взять /usr/local/www/awstats/cgi-bin/awstats.model.conf. К счастью awstats позволяет подключать конфиг из внешних файлов, поэтому мы создадим один общий конфиг-файл и будем подключать его в конфиг-файлы конкретных сайтов.
Таки создадим главный конфиг-файл:
cp /usr/local/www/awstats/cgi-bin/awstats.model.conf /web/awstats/etc/default.conf
cp /usr/local/www/awstats/cgi-bin/awstats.model.conf /web/awstats/etc/default.conf
Подправим его по вкусу. Вот строчки, которые я менял:
LogFormat=1
DirData=\”/web/awstats/data\”
LoadPlugin=\”decodeutfkeys\”
LoadPlugin=\”geoipfree\”
LogFormat=1
DirData=”/web/awstats/data”
LoadPlugin=”decodeutfkeys”
LoadPlugin=”geoipfree”
Последние две строчки – это загрузка плагинов, отлюченных по умолчанию, чтобы они работали, вам потребуется установить дополнительный софт:
p5-Geo-IPfree
p5-URI
Теперь создадим конфиг файл /web/awstats/etc/awstats.domain.com.conf для нашего домена domain.com. Запишем туда следующее:
Include \”/web/awstats/etc/default.conf\”
LogFile=\”/var/log/www/domain.com-access.log\”
SiteDomain=”domain.com\”
HostAliases=\”REGEX[.*\\.domain\\.com$]\”
Include “/web/awstats/etc/default.conf”
LogFile=”/var/log/www/domain.com-access.log”
SiteDomain=”domain.com”
HostAliases=”REGEX[.*.domain.com$]”
HostAliases нужен для того, чтобы учитывать все поддомены основного домена.
Шаг 2. Автоматизация парсинга логов и построения отчётов.
Дабы минимизировать работу при добавлении очередного сайта создадим два скрипта управляемые единым конфигом. Первый скрипт для парсинга логов, второй для создания отчётов.
Оба скрипта будут подключать файл настроек. С него и начнём.
Файл настроек /web/stat.config.sh
AWDIR=\”/web/awstats\”
AWSTATS=\”$AWDIR/cgi-bin/awstats.pl\”
REPORTS=\”alldomains allhosts lasthosts unknownip allemails lastemails allemailr lastemailr alllogins lastlogins allrobots lastrobots urldetail urlentry urlexit osdetail browserdetail unknownbrowser unknownos refererse refererpages keyphrases keywords errors404\”
SITES=\”domain.com\”
INDEX_PAGE=\”$AWDIR/data/index.html\”
AWDIR=”/web/awstats”
AWSTATS=”$AWDIR/cgi-bin/awstats.pl”
REPORTS=”alldomains allhosts lasthosts unknownip allemails lastemails allemailr lastemailr alllogins lastlogins allrobots lastrobots urldetail urlentry urlexit osdetail browserdetail unknownbrowser unknownos refererse refererpages keyphrases keywords errors404”
SITES=”domain.com”
INDEX_PAGE=”$AWDIR/data/index.html”
Скрипт парсинга логов /web/stat.parse.sh
#!/bin/sh
. /web/stat.config.sh
for SITE in $SITES; do
$AWSTATS -config=$SITE
done
#!/bin/sh
. /web/stat.config.sh
for SITE in $SITES; do
$AWSTATS -config=$SITE
done
Скрипт генерации отчётов /web/stat.render.sh
#!/bin/sh
. /web/stat.config.sh
custom_report() {
SITE=$1
REPORT=$2
$AWSTATS -config=$SITE -output=$REPORT -staticlinks > \”$AWDIR/data/awstats.$SITE.$REPORT.html\”
}
# Create million statistics pages
for SITE in $SITES; do
$AWSTATS -config=$SITE -output -staticlinks > \”$AWDIR/data/$SITE.html\”
for REPORT in $REPORTS; do
custom_report $SITE $REPORT
done
done
# And now build index file
rm $INDEX_PAGE
for SITE in $SITES; do
echo \”
\” >> $INDEX_PAGE
done
#!/bin/sh
. /web/stat.config.sh
custom_report() {
SITE=$1
REPORT=$2
$AWSTATS -config=$SITE -output=$REPORT -staticlinks > “$AWDIR/data/awstats.$SITE.$REPORT.html”
}
# Create million statistics pages
for SITE in $SITES; do
$AWSTATS -config=$SITE -output -staticlinks > “$AWDIR/data/$SITE.html”
for REPORT in $REPORTS; do
custom_report $SITE $REPORT
done
done
# And now build index file
rm $INDEX_PAGE
for SITE in $SITES; do
echo “
” >> $INDEX_PAGE
done
Сделаем эти два скрипта исполняемыми:
chmod u+x /web/stat.parse.sh
chmod u+x /web/stat.render.sh
chmod u+x /web/stat.parse.sh
chmod u+x /web/stat.render.sh
Перед тем, как продолжить, следует проверить, всё ли правильно вы сделали. Для этого следует запустить stat.parse.sh, затем stat.render.sh. Если всё правильно, первый скрипт (stat.parse.sh) выведёт отчёт о парсинге, наподобие этого:
Create/Update database for config \”/usr/local/etc/awstats/awstats.domain.com.conf\” by AWStats version 6.7 (build 1.892)
From data in log file \”/var/log/www/domain.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: 983
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 983 new qualified records.
Create/Update database for config “/usr/local/etc/awstats/awstats.domain.com.conf” by AWStats version 6.7 (build 1.892)
From data in log file “/var/log/www/domain.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: 983
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 983 new qualified records.
После запуска второго скрипта (stat.render.sh) в каталоге /web/awstats/data должны будут появиться html файлы статистики
Теперь настроим crontab пользователя web, добавим такие строчки для подсчёта статистики каждый час (или раз в день, сами выбирайте)
30 * * * * /web/stat.parse.sh
6 35 * * * * /web/stat.render.sh
30 * * * * /web/stat.parse.sh
6 35 * * * * /web/stat.render.sh
Шаг третий. Настройка nginx.
Сделаем так, чтобы nginx генерил логи в формате apache. Замечу, что последние версии nginx по умолчанию генерят логи в формате apache. На всякий случай приведу строку конфига nginx, описывающую формат логов, использующийся в apache:
log_format main \’$remote_addr - $remote_user [$time_local] \”$request\” \’
\’$status $body_bytes_sent \”$http_referer\” \’
\’\”$http_user_agent\”\’;
log_format main ‘$remote_addr - $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent”’;
Если честно, я не знаю. Может быть, прошлые версии nginx тоже генерили всё как надо, но когда я разбирался с этой темой nginx && awstats в первый раз, то встречал в различных руководствах формат настройки nginx, поэтому решил упомянть его в этом документе тоже.
Теперь создадим конфиг виртуального хоста, который мы будем использовать для просмотра статистики. Проще говоря веб-корень этого хоста будет находится в каталоге /web/awstats/data
server {
server_name .stat.somewhere.com;
root /web/awstats/data;
location /awstatsclasess {
alias /web/awstats/classes;
}
location /awstatscss {
alias /web/awstats/css;
}
location /awstatsicons {
alias /web/awstats/icons;
}
}
server {
server_name .stat.somewhere.com;
root /web/awstats/data;
location /awstatsclasess {
alias /web/awstats/classes;
}
location /awstatscss {
alias /web/awstats/css;
}
location /awstatsicons {
alias /web/awstats/icons;
}
}
При запросе http://stat.somewhere.com будет загружаться index.html, сгенерированный скриптом генерации отчётов, в котором будут ссылки на статистику всех контролируемых сайтов.
Шаг 4. Настройка logrotate
logrotate нужен для того, чтобы файлы логов не разрастались до чудовищных размеров. Logrotate с заданной периодичностью обнуляет файл логов, удаляя или архивируя старую информацию.
Надоело писать, попозже допишу как настраивать logrotate )
Популярность: 40%
Категория: Вебмастеру |
Похожие статьи:
- Продажа MP3 через партнерку
- Установка php framework Kohana
- SMF форум - пропали новые сообщения ( solved)
- Настройка Kohana и nginx
- Список сайтов где можно взять графику для игр
Июнь 23rd, 2010 - 12:27 пп
ну че не дописал??
Октябрь 26th, 2010 - 12:50 пп
Скажите пожалуйста, а где Вы покупаете электрооборудование? Мне посоветовали много интернет магазинов, но я не могу выбрать. Заранее всем спасибо за ответ, и извиняюсь если попал не в тему.
Ноябрь 13th, 2012 - 11:37 пп
Поставил awstat 7.0, раньше им не пользовался, все вроде работает, но скрипт не определяет ни одного бота или поискового запроса, не подскажете в чем может быть проблемма?