Учет трафика netacct-mysql


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

http://netacct-mysql.gabrovo.com/download/
http://netacct-mysql.gabrovo.com/?section=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
wget http://mirrors.bsd.md/Ubuntu/pool/main/libp/libpcap/libpcap0.8_1.0.0-6_amd64.deb
wget http://mirrors.bsd.md/Ubuntu/pool/main/libp/libpcap/libpcap0.8-dev_1.0.0-2ubuntu1_amd64.deb
wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/libm/libmysqlclient-lgpl/libmysqlclient10_3.23.56-3_amd64.deb
wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/libm/libmysqlclient-lgpl/libmysqlclient10-dev_3.23.56-3_amd64.deb


Далее необходимо поставить 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-запросов.

Feb. 12, 2011