Все ленты — последние статьи

Учет трафика с помощью netacct-mysql

Различные версии netacct-mysql лежат здесь:

http://netacct-mysql.gabrovo.com/download/

Первым делом поставил netacct-mysql-0.78.tar.gz — не понравилось, можно только смотреть общий объем трафика за сутки, без возможности отслеживать посещенные сайты. Затем поставил netacct-mysql-0.73.tar.gz , оказалось что скрипт, лежащий в архиве создает таблицу не с тем именем, которое нужно программе, и это при том, что на сайте напротив этого пакета красовалась надпись stable, разбираться не стал, какая база нужна программе на самом деле, скачал netacct-mysql-0.73rc2.tar.gz , этот пакет наконец-то установился и заработал без проблем.

 


Итак использовались следующие пакеты:

Сам netacct-mysql:

http://netacct-mysql.gabrovo.com/download/netacct-mysql-0.73rc2.tar.gz

И deb-пакеты, которые пришлось докачивать, так как без них netacct-mysql отказывался собираться (в моем примере для архитектуры amd64, для i386 там также есть):

http://packages.ubuntu.com/ru/dapper/libmysqlclient10 :

libmysqlclient10_3.23.56-3_amd64.deb

http://packages.ubuntu.com/ru/dapper/libmysqlclient10-dev :

libmysqlclient10-dev_3.23.56-3_amd64.deb

http://mirrors.bsd.md/Ubuntu/pool/main/libp/libpcap/ :

libpcap0.8_1.0.0-2ubuntu1_amd64.deb
libpcap0.8-dev_1.0.0-2ubuntu1_amd64.deb

Приступим:

wget http://netacct-mysql.gabrovo.com/download/netacct-mysql-0.73rc2.tar.gz

Далее необходимо поставить mysql-server:

sudo apt-get install mysql-server

У меня уже стоял, на всякий случай укажу версию:

mysql -V
mysql Ver 14.14 Distrib 5.1.49, for debian-linux-gnu (x86_64) using readline 6.1

Ставим скачанные пакеты:

sudo dpkg -i libpcap0.8_1.0.0-6_amd64.deb

sudo dpkg -i libpcap0.8-dev_1.0.0-2ubuntu1_amd64.deb

sudo dpkg -i libmysqlclient10_3.23.56-3_amd64.deb

sudo dpkg -i libmysqlclient10-dev_3.23.56-3_amd64.deb

Распаковываем netacct-mysql и ставим:

tar xvzf netacct-mysql-0.73rc2.tar.gz

cd netacct-mysql-0.73rc2

./configure

make

sudo make install

netacct будет установлена в /usr/local директории, при этом конфигурационные файлы будут в /usr/local/etc/, а сама программа в /usr/local/sbin.

Далее редактируем файл netacct.sql , который необходим для создания нужной программе БД, в нем стоит изменить пароль для пользователя, от имени которого программа будет обращаться к базе данных, затем:

mysql -u root -p < netacct.sql

Также возможно придется выполнить вот эту операцию (без нее netacct отказывался работать с mysql):

mysql -u root -p

SET PASSWORD FOR 'acct'@'localhost' = OLD_PASSWORD('acct_password');

где acct_password — пароль, который вы вписали netacct.sql.

quit;

Теперь редактируем файл конфигурации (закомментированные, неиспользуемые опции убрал из конфига):

sudo nano /usr/local/etc/naccttab

database mysql # указываем сливать инфу в mysql

mysql_user acct # имя пользователя к БД

mysql_password acct_password # пароль

mysql_host 127.0.0.1

# ip сервера с mysql
# в данном случае — на этом же компе

mysql_database netacct # имя базы данных

flush 300

# данные в базу будут сливаться
# каждые 300сек=5мин.

fdelay 60

# сессия между двумя ip считается завершенной
# если с момента последней передачи пакетов
# проходит 60сек. Только после этого разрешается
# вносить вносить соответствующую запись в БД

file /var/log/acct # файл логов

dumpfile /var/log/acct-dump

# При остановке демона, например командой
# kill, несохраненные данные скидываются
# в файл, при следующем старте демона
# Из файла вносятся в базу

notdev eth1

# Не слушать этот адаптер
# eth1 смотрит в интернет

device eth0

# включаем promiscous mode -
# так называемый «неразборчивый» режим,
# в котором сетевая плата позволяет принимать
# все пакеты независимо от того, кому они
# адресованы. Эта возможность обычно
# используется в сетевых анализаторах трафика.
# eth0 смотрит в локалку

iflimit eth0 # Вести лог только с этого адаптера

ignoremask 255.255.255.0

# Игнорировать трафик между сетями
# класса C — т.е. локальный трафик

ignorenet 127.0.0.0 255.0.0.0 # игнорировать lo-интерфейс

debug 2 # уровень отладки
debugfile /tmp/nacctdt.debug # файл с логами отладки

# Device configuration
# Defines where the real data starts for each type of interface
# First give the name prefix, then the offset in bytes to the start
# of the real data, then the offset of the type field in bytes. If
# there is no type field, just give a 0.
# Don't specify SLIP or PPP devices here, otherwise association of
# dynamic ip-addresses with usernames won't work
# Put device types with more traffic last.
headers tr 40 38
headers lo 14 12
headers isdn 4 0
# headers isdn 14 0 # for hdlc/trans/cisco and hdlc/trans/raw
headers eth 14 12
headers plip 14 12

# Включениеотключение записей в базу
# disable 2 # disable output of protocol
# disable 3 # disable output of source address
# disable 4 # disable output of source port
# disable 5 # disable output of destination address
# disable 6 # disable output of destination port
disable 7 # disable output of packets count
# disable 8 # disable output of byte count
# disable 9 # disable output of device name
# disable 10 # disable output of user name

Сохраняем, запускаем:

cd /usr/local/sbin/
./nacctd

Через пять минут можно проверять БД на наличие статистики.

При использовании выявилась такая проблема, через некоторое время работы растет обьем памяти, используемый приложением. Возможно связано это с длительными сессиями, ведь пока они не завершатся, данные в mysql не вносятся, а хранятся в оперативке, возможно есть другая причина, точно не знаю, решил просто — добавлением в cron команды перезапуска демона каждые три часа:

crontab -u root -e

В открывшемся файле добавляем строки:

13 */3 * * * killall nacctd
14 */3 * * * /usr/local/sbin/nacctd

И сохраняем. Теперь в 13 минут каждого третьего часа nacctd останавливается, при этом он скидывает не сохраненную информацию в дамп, и в 14 минут каждого третьего часа запускается, и информация из дампа при следующей записи вносится в базу данных.

На этом настройка закончена, netacct-mysql используется на рабочем сервере около двух месяцев, пока устраивает. С помощью скриптов можно реализовать различные запросы к mysql для получения статистики использования интернет, зависит от вашей фантазии и знания sql-запросов.