Home > nginx > Быстрая установка awstats для анализа логов nginx

Быстрая установка awstats для анализа логов nginx

February 3rd, 2009

Ставим awstats из портов или из Yum-а.
Теперь надо определиться с логами nginx-а. Тут два варианта: либо логи для всех виртуалхостов пишутся в один файл, либо для каждого хоста в свой. В nginx 0.7 есть функционал позволяющий в директиве access_log использовать переменные. Т.е. например можно сделать так:

access_log /var/log/$host-nginx/nginx-access.log

В 0.6 так нельзя. Поэтому я буду рассматривать вариант, когда лог-файл один и общий.
Формат логов сделаем такой:

log_format  main  '$host $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /var/log/nginx/nginx-access.log main;

Теперь создаем конфиг awstats-а для каждого виртуалхоста на базе дефолтового образца.
Правим в нем строки:

LogFile="/var/log/nginx/nginx-access.log"
LogType=W
LogFormat = "%virtualname %host %time1 %methodurl %code %bytesd %refererquot %uaquot"
LogSeparator=" "

и параметры SiteDomain, HostAliases.
Так же если надо считать статистику по странам в конфиг надо добавить строчку:

LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"

И поставить порты: GeoIP-1.4.4_1, p5-Geo-IP-1.36 (Linux: geoip.x86_64, perl-Geo-IP.x86_64)

Теперь создаем и добавляем в кронтаб файлик awstats_run.sh с такими строками:

#!/bin/sh
/usr/share/awstats/tools/awstats_buildstaticpages.pl -config=domain -dir=/home/awstats/domain.com -static -update

Не забыть включить ротацию логов Nginx. Пример для newsyslog.conf

/var/log/nginx/nginx-access.log               640  7     *    @T00  Z        /var/run/nginx.pid  30

Если дело происходит на Linux и надо настроить logrotate, то можно сделать ротацию и обсчет логов по другому:
Правим Logrotate-конфиг Nginx:

/var/log/nginx/*log {
    rotate 10
    size=100M
    missingok
    notifempty
    compress
    sharedscripts
    prerotate
    /etc/awstats/awstats_run.sh
    endscript
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Небольшой минус – ротация будет не точно посуточная.

Если надо подключить к awstats много доменов, то можно воспользоваться этим скриптом, предварительно создав конфиг-образец awstats.domain.com.conf:

#!/usr/local/bin/bash
CONFIG="/usr/local/etc/awstats"
OUTPUT="/home/domains/sampledomain.com/awstats"

if [ "x$1" = "x" ]; then
    echo "Usage: $0 domain.com"
    exit
fi

sed -e "s/domain.com/$1/g" "$CONFIG/awstats.domain.com.conf" > "$CONFIG/awstats.$1.conf"
echo "/usr/local/www/awstats/tools/awstats_buildstaticpages.pl -config=$1 -dir=$OUTPUT -static -update" >> $CONFIG/awstats_run.sh

Если мы будем генерировать статистику для всех сайтов и выкладывать ее на какой то один общий домен, то не забыть отключить дефолтный конфиг для awstats для апача.
Для создания общей страницы статистики для всех сайтов можно использовать эту тулзу
В различных ОС и дистрибутивах Linux скрипты awstats устанавливаются в разные места. Это надо проверить вручную запустив пересчет статистики и убедившись в отсутствии ошибок.

nginx ,

  1. adm.unix
    August 18th, 2009 at 21:25 | #1

    Ошибка.

    Ротация логов:

    /var/log/nginx-access.log 640 7 * @T00 Z /var/run/nginx.pid 30

    А при этом nginx пишет логи сюда: access_log /var/log/nginx/nginx-access.log main

  2. adm.unix
    August 18th, 2009 at 21:26 | #2

    Для FreeBSD неверно указано размещение awstats_buildstaticpages.pl

    вот правильный путь:

    /usr/local/www/awstats/tools/awstats_buildstaticpages.pl

  3. admin
    August 18th, 2009 at 22:07 | #3

    Спасибо. Поправил путь и дописал заметку про разные пути.

  4. April 6th, 2010 at 19:33 | #4

    Спасибо, с учётом локальных приколов (импортировал даже логи старого формата) справился за час, в начале не зная вообще ничего и без желания разбираться в деталях, ибо надеюсь делаю это первый и последний раз. Ещё раз спасибо.

  5. admin
    April 6th, 2010 at 19:38 | #5

    Спасибо за отзыв =)
    На самом деле там все довольно просто. Главное следить чтобы логи слишком долго не обрабатывались.

  6. Denis
    June 3rd, 2010 at 21:15 | #6

    Спасибо за статью,просто и понятно

  1. No trackbacks yet.