The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Считаем трафик с mod_accounting (mod_accounting apache log traffic web mysql)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: mod_accounting, apache, log, traffic, web, mysql,  (найти похожие документы)
From: webmechanics.ru Date: Mon, 13 Apr 2006 18:21:07 +0000 (UTC) Subject: Считаем трафик с mod_accounting Оригинал: http://www.webmechanics.ru/blog/?page_id=15 mod_accounting - это модуль веб-сервера Apache, позволяющий считать входящий и исходящий трафик, генерируемый сайтами. Трафик у нас (пока) платный, поэтому нам интересно знать, какие из сайтов, размещенные на нашей машине, сколько трафика генерируют. Для корректной работы mod_accounting необходимы веб-сервер Apache (версии 1.3.х, модуль не работает с версией 2.0.х) и сервер БД MySQL или PostgreSQL. Веб-сервер у вас наверняка уже есть (иначе зачем вам считать трафик :) ?)... MySQL (если он еще не установлен) можно утсановить стандартными средствами вашего дистрибутива (yum install mysql* для Fedora Core). Для установки модуля необходимо скачать с сайта проекта архив с последней стабильной версией mod_accounting, разархивировать его во временную папку и, при необходимости поправив Makefile, командой make install установить модуль. Разумеется, вы можете (и скорее всего это будет лучшим вариантом), установить этот модуль из пакетов своего дистрибутива (yum install mod_accounting для Fedora Core). После установки модуля можно приступить к его конфигурированию. Необходимо создать в MySQL базу данных для хранения статистики, и пользователя, обслуживающего эту БД. CREATE DATABASE mod_acc; GRANT USAGE ON *.* TO 'mod_acc'@'localhost' IDENTIFIED BY 'password'; INSERT INTO mysql.db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES ('localhost', 'mod_acc', 'mod_acc', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'Y', 'Y'); FLUSH PRIVILEGES; Этими командами мы создали БД mod_acc и пользвателя mod_acc с паролем password для работы с этой БД. Далее, создаем таблицы в БД mod_acc для хранения данных. USE mod_accounting; DROP TABLE IF EXISTS archive_traffic; CREATE TABLE archive_traffic ( id int(8) NOT NULL auto_increment, ts datetime default NULL, inbound bigint(20) unsigned default '0', outbound bigint(20) unsigned default '0', host char(255) default NULL, PRIMARY KEY (id), KEY host (host) ) TYPE=MyISAM; DROP TABLE IF EXISTS ipaccounting; CREATE TABLE ipaccounting ( bytesin bigint(20) default '0', bytesout bigint(20) default '0', host varchar(255) default NULL ) TYPE=HEAP; Первая таблица, archive_traffic, предназначена для архивирования статистики, вторая - ipaccounting, для хранения текущей статистики. Для загруженных серверов возможно имеет смысл задать тип БД HEAP для хранения данных таблицы в оперативной памяти (это ускорит операции обновления данных). Теперь необходимо заполнить таблицу ipaccounting данными о хостах, обслуживаемых вашим сервером Apache. INSERT INTO ipaccounting (bytesin, bytesout, host) VALUES (0,0,myhost.ru); INSERT INTO ipaccounting (bytesin, bytesout, host) VALUES (0,0,www.myhost.ru); INSERT INTO ipaccounting (bytesin, bytesout, host) VALUES (0,0,wap.myhost.ru); и т.д. Для каждого хоста имеет смысл добавить две записи с префиксом www. и без него. Так ваша статистика будет более полной. Теперь можно перейти к конфигурации Apache. Подключаем модуль: LoadModule accounting_module modules/mod_accounting.so AddModule mod_accounting.c Настраиваем обновление статистики в таблице ipaccounting. Каждое ображение к Aache будет генерировать запрос к MySQL следующего содержания: "обновить статистику для хоста х, увеличить исходящие байты на исходящие байты запроса, увеличить входящие байты на входящие байты запроса". AccountingQueryFmt "UPDATE ipaccounting SET bytesin = bytesin + %r, bytesout = bytesout + %s WHERE LOWER( host ) = LOWER( `%h' )" AccountingDatabase mod_acc AccountingDatabaseDriver mysql AccountingDBHost localhost 3306 AccountingLoginInfo mod_acc mod_acc Перезапускаем Apache, заходим на любой из сайтов, обслуживаемых им (и внесенных в таблицу ipaccounting), после этого смотрим, как изменились данные в таблице ipaccounting нашей БД. SELECT * FROM ipaccounting WHERE host = "myhost.ru" MySQL должен вернуть что-то типа: | bytesin | bytesout | host | | 12 | 543 | myhost.ru | Если значения bytesin и bytesout больше нуля - значит mod_accounting работает. Помимо подсчета статистики нас интересует ее анализ. Для того, чтобы не создавать лишних затруднений модулю сбора статистики, мы периодически экспортируем данные в таблицу archive_traffic, в которой и производим анализ. Скрипт на PHP, отвечающий за экспорт статистики, приведен ниже. Мы запускаем этот скрипт через cron раз в сутки. < ?php // подключаем файл соединения с БД require_once('sitesuite.php'); // делаем выборку всех данных из таблицы текущей статистики mysql_select_db($database_sitesuite, $sitesuite); $query_wm_runtime = "SELECT * from ipaccounting"; $wm_runtime = mysql_query($query_wm_runtime, $sitesuite) or die(mysql_error()); $row_wm_runtime = mysql_fetch_assoc($wm_runtime); // архивируем данные для каждого хостав таблицу archive_traffic do { $inbound = $row_wm_runtime['bytesin'];; $outbound = $row_wm_runtime['bytesout'];; $host = $row_wm_runtime['host'];; $sql = sprintf("INSERT INTO archive_traffic (ts, inbound, outbound, host) VALUES (NOW(), '%s', '%s', '%s')", $inbound, $outbound, $host); mysql_select_db($database_sitesuite, $sitesuite); $do = mysql_query($sql, $sitesuite) or die(mysql_error()); } while ($row_wm_runtime = mysql_fetch_assoc($wm_runtime)); // обнуляем данные в таблице текущей статистики $sql = "UPDATE ipaccounting SET bytesin = 0, bytesout = 0"; mysql_select_db($database_sitesuite, $sitesuite); $do = mysql_query($sql, $sitesuite) or die(mysql_error()); mysql_free_result($wm_runtime); ?> Теперь можно использовать данные в таблице archive_traffic для анализа распределения трафика по хостам. А архиве вы найдете простой скрипт на php, выводящий статистику по хостам за определенный период в виде таблицы. Сам модуль, php скрипты и схему БД вы можете скачать здесь.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, AL (??), 13:12, 05/09/2007 [ответить]  
  • +/
    В apache 2.0 появился замечательный модуль mod_logio. Все mod_accounting идут лесом.
     
  • 2, Sw00p (?), 15:29, 21/11/2007 [ответить]  
  • +/
    есть патч для модуля с работой 2.0
     
  • 3, Dybik (?), 04:54, 02/03/2009 [ответить]  
  • +/
    Дополнение. Чтоб после перезапуска MySQL не вставлять все хосты обратно во временную таблицу делаем так:
    INSERT INTO 'xfer_buffer' ('host','xfer') VALUES (LOWER('%h'),'%r'+'%s') ON DUPLICATE KEY UPDATE 'xfer'='xfer'+'%r'+'%s'
    --
    Структурра временной таблицы:
    CREATE TABLE 'xfer_buffer' (
    'host' varchar(255) NOT NULL,
    'xfer' bigint(20) unsigned NOT NULL DEFAULT '0',
    PRIMARY KEY ('host')
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
    --
    Структурра архивной таблицы:
    CREATE TABLE 'xfer_archive' (
    'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
    'host' varchar(255) DEFAULT NULL,
    'xfer' bigint(20) unsigned NOT NULL DEFAULT '0',
    'tstamp' timestamp NULL DEFAULT NULL,
    PRIMARY KEY ('id'),
    KEY 'host' ('host')
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC
    --
    У меня чуть упрощенный вариант, но смысл понятен я думаю.
     
  • 4, croamx (?), 12:24, 16/02/2010 [ответить]  
  • +/
    Вот тут патч
    http://www.netup.ru/downloads/mod_accounting-0.5_httpd2x.patch
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру