Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> WWW —> mod_accounting

Подсчёт траффика apache - модуль mod_accounting

Автор: lissyara.


    Встала интересная проблема - хотелось посчитать траффик, который генерит мой WWW-сервер apache. Но, собственно проблема, заключалась в том, что этот же сервер служил шлюзом в локалке, и через него по тому же 80 порту шёл траффик на пользователей локалки... Да и виртуальных доменов было несколько, и хотелось статистику по отдельности. Вначале, как обычно, хотел пойти через одно место - парсить логи - shell, perl, awk & etc - но порывшись в портах нашёл модуль mod_accounting специально под это заточенный.
/usr/home/lissyara/>cd /usr/ports
/usr/ports/>make search name='mod_accounting'
Port:   mod_accounting-0.5_4
Path:   /usr/ports/www/mod_accounting
Info:   An Apache module that records traffic statistics into a database
Maint:  apache@FreeBSD.org
B-deps: apache-1.3.34_4 expat-2.0.0 gettext-0.14.5_1 ldconfig_compat-1.0_5
libgnugetopt-1.2 libiconv-1.9.2_1 mysql-client-4.1.16_1
postgresql-client-7.4.11 rc_subr-1.31_1 readline-5.0
R-deps: apache-1.3.34_4 expat-2.0.0 gettext-0.14.5_1 ldconfig_compat-1.0_5
libgnugetopt-1.2 libiconv-1.9.2_1 mysql-client-4.1.16_1
postgresql-client-7.4.11 rc_subr-1.31_1 readline-5.0
WWW:    http://mod-acct.sourceforge.net

/usr/ports/>cd /usr/ports/www/mod_accounting
/usr/ports/www/mod_accounting/>make && make install && make clean

Tут снова наступил облом... Он тащщил за собой PostgreSQL. Но у меня-то MySQL! Ни опции типа WITHOUT_PGSQL=yes, ни -DWITHOUT_PGSQL=YES не помогали... Логично рассудив, что порт кривой, полез рихтовать Makefile - надо найти такую секцию в нём:

.if defined(WITHOUT_PGSQL)
MAKE_ARGS+=     WITHOUT_PGSQL=YES
.else
USE_PGSQL=     YES
.endif

и заменить на такую:

.if defined(WITHOUT_PGSQL)
MAKE_ARGS+=     WITHOUT_PGSQL=YES
.else
#USE_PGSQL=     YES
MAKE_ARGS+=     WITHOUT_PGSQL=YES
.endif

После этого он прекрасно собрался без PostgreSQL. После чего идём редактировать конфиг апача - /usr/local/etc/apache/httpd.conf, кстати, сам модуль в нём уже раскомментирован - довольно необычно...

<IfModule mod_accounting.c>
# конфиг модуля `mod_accounting`
# кверя к БД на update/insert Переменные внутри квери:
# %s - послано, байт
# %r - принято, байт
# %h - имя виртуального хоста
# %u - имя пользователя (если авторизовался)
# P.S. В версии 0.6 гораздо больше опций. У меня старая - 0.5.
# В варианте, который дан в документации, поля `время` нету,
# там просто предлагается считать тотальный траффик по
# виртуальным хостам. Может оно и удобней, для провайдеров, но
# я-то делаю для своего сервера, и мне нужна его статистика -
# желательно поточнее, чтобы можно было посторить графики
# загруженности сервера.
AccountingQueryFmt      "INSERT INTO `apache_traff` (`vremya`, \
                        `bytes_in`, `bytes_out`, `host`) VALUES \
                        (UNIX_TIMESTAMP(), %r, %s, LOWER('%h'))"
# БД в которую будет складываться статистика
AccountingDatabase      apache_traffic
# Тип ДБ - поддерживаются два типа - postgres и mysql
AccountingDatabaseDriver                mysql
# хост и порт БД
AccountingDBHost        localhost       3306
# Пользователь и пароль для соединения с БД
AccountingLoginInfo     lissyara        main_password
# Cколько секунд ждать перед запросом к MySQL на обновление таблицы
# (надо для того, чтобы не ломился на каждый запрос в БД - это
# непроизводительно, гораздо лучше, когда накопит немного статистики,
# а затем скопом её в БД запхнёт.) Мне часто не надо, потому поставил
# раз в минуту. Надо чаще - меняйте
AccountingTimedUpdates  60
# Хосты, траффик с/на которые считать не надо (Вам же не надо знать,
# что Вы нагенерили своему сайту 100 мег траффика в месяц, а все
# остальные посетители 99 мег :) - абидно, однако :)). Можно запихать
# отдельные хосты (192.168.29.50), сети (192.168.50.0/255.255.255.0)
# или же диапазоны адресов (192.168.80.10-192.168.80.254)
AccountingIgnoreHosts   192.168.20.141 192.168.30.0/255.255.255.0
</IfModule>

После чего я поторопился перезапустить апач:

/usr/local/etc/apache/>/usr/local/etc/rc.d/apache.sh restart
Stopping apache.
Waiting for PIDS: 32302.
Starting apache.
/usr/local/etc/apache/>

За что получил в /var/log/httpd-error.log такие ошибки:

[Fri Feb 3 17:29:39 2006] [error] Accounting: couldn't setup the database link!
[Fri Feb 3 17:29:41 2006] [error] Accounting: couldn't setup the database link!

Забыл создать таблицы... Создал:


-- phpMyAdmin SQL Dump
-- version 2.7.0-pl1
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Время создания: Фев 03 2006 г., 17:35
-- Версия сервера: 4.0.25
-- Версия PHP: 4.4.1
-- 
-- БД: `apache_traffic`
-- 

-- --------------------------------------------------------

-- 
-- Структура таблицы `apache_traff`
-- 

CREATE TABLE `apache_traff` (
  `vremya` int(32) NOT NULL default '0',
  `bytes_in` int(12) NOT NULL default '0',
  `bytes_out` int(12) NOT NULL default '0',
  `host` char(255) NOT NULL default '',
  KEY `vremya` (`vremya`)
) TYPE=MyISAM COMMENT='Траффик апача';

-- 
-- Дамп данных таблицы `apache_traff`
-- 

Тут же в таблицы упали логи за те 5 минут, что апач работал без таблицы. Даже перезапускать не пришлось :) Ну, а как выборку делать - сами догадаетесь - если понадобился этот модуль, то уж запрос к MySQL напишете :)



размещено: 2006-02-03,
последнее обновление: 2007-09-29,
автор: lissyara


Alexander, 2006-05-18 в 2:12:57

Если кому нужен скрипт для просмотра базы данных по этому моду, пишите.

xeon, 2006-09-06 в 12:02:27

А есть ли аналог под Apache 2.2 ?

logan, 2006-11-05 в 0:42:28

он работает и под apache2.2

при очень слабой машине с серьезной загрузкой подвисают соединения с БД, и база может "встать". Особенно заметно на PostgreSQL 7.x

Студент Из России, 2006-11-30 в 10:44:27

Makefile редактировать НЕ пришлось, встало с поддержкой MySQL (MySQL сервер и клиент версии 4.0.27 уже стояли).

Собирали так (для Apache 1.3.37):

# cd /usr/ports/www/mod_accounting
# make install WITHOUT_PGSQL=YES clean

Благодарим за информацию о mod_accounting - пригодился.

Зизи, 2006-12-05 в 14:06:23

Да, реально # make install WITHOUT_PGSQL=YES clean
нормальный выход, это же глобальная переменная, даже мудрить ничего не надо.

hellard, 2007-01-31 в 16:08:30

Кто что прокоментирует?

FreeBSD 5.4-RELEASE

www# make && make install && make clean
===>  mod_accounting-0.5_4 : Error from bsd.apache.mk. apache22 is installed (or APACHE_PORT is defined) and port requires 13.
*** Error code 1

Stop in /usr/ports/www/mod_accounting.

hellard, 2007-03-05 в 5:39:27

2 logan,подскажи метод сборки под апачу 2.2

ProFTP, 2008-05-15 в 10:54:37

mod_watch



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1923 секунд
Из них PHP: 40%; SQL: 60%; Число SQL-запросов: 77 шт.
Исходный размер: 27367; Сжатая: 7490