Настройка 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 \”

$SITE

\” >> $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 “

$SITE

” >> $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%

Категория: Вебмастеру |

Похожие статьи:

Комментарии

3 Комментариев на “Настройка awstats, nginx и logrotate”

  1. знает кто сказал:

    ну че не дописал??

  2. Электронщик сказал:

    Скажите пожалуйста, а где Вы покупаете электрооборудование? Мне посоветовали много интернет магазинов, но я не могу выбрать. Заранее всем спасибо за ответ, и извиняюсь если попал не в тему.

  3. Леонид сказал:

    Поставил awstat 7.0, раньше им не пользовался, все вроде работает, но скрипт не определяет ни одного бота или поискового запроса, не подскажете в чем может быть проблемма?