Страница 1 из 1

pmaсct (счётчик траффика)

Добавлено: 2009-02-09 11:59:46
jabax
Вопщем столкнулся с проблемой подсчёта траффика. Мона считать pf, но были свои нюансы и мне это не подходило. Решил по советам остановиться на pmacct . Проект загадочно документирован. Не то чтобы документации нет, она просто раскидана чёрти знает где. Из-за этого я с этой софтинкой провозился не 4 часа а 1,5 дня. Воопщем решил написать статейку .


Итак по порядку.

1) Установка - стандартная из портов. Make search name="pmacct" и т.д.
не забудьте тока сконфигурировать его с поддержкой mysql если нада

2)Краткое описание проги и архитектуры
pmacсt - софтина для подсчёта и классификации(http и т.д.) траффика и хранения результатов в Mysql или в оперативке.
pmacct как проект состоит из 3-х демонов и клиента
pmacctd - основной демон
nfacctd
sfacctd
Демоны отличаются библиотеками для сбора инфы (Насколько я понял).

Расположение доков следующее

/usr/local/share/doc/pmacct- тут лежат фак примеры и ридми , наиболее полезен файл EXAMPLES(написано как запускать демонов и т.д.) - в остальных ничё интересного пока не нашёл.
манов нету - доки вызываются для демонов типа pmacctd -h, для клиента просто запуском без опций (/usr/local/bin/pmacct)
файлы лучше брать отсюда - /usr/ports/distfiles/pmacct-0.11.5.tar.gz тк значительная часть доков оттудв не извлекается почему-то.

3)Пускаем pmacct c конфигом.
Создаём базу и таблицу из файлов pmacct-create-db_v7.mysql и pmacct-grant-db.mysq из
/usr/ports/distfiles/pmacct-0.11.5.tar.gz - в архиве папка sql
лично мне нужна тока таблица и юзер

#создаю юзера pmacct с паролем 1 доступного тока с локолхоста (эт не обязательно - мона просто забить работающего юзера к примеру root)

Код: Выделить всё

	CREATE USER 'pmacct'@'localhost' IDENTIFIED BY '1';  
	

#права юзеру

Код: Выделить всё

	GRANT SELECT , 
	INSERT ,
	UPDATE ,
	DELETE ,
	ALTER ,
	INDEX ON * . * TO 'pmacct'@'localhost' IDENTIFIED BY '1' ;
	

# создаю таблицу

Код: Выделить всё

	create table `acct` (                 
        agent_id INT(2) UNSIGNED NOT NULL,
        class_id CHAR(16) NOT NULL,
        mac_src CHAR(17) NOT NULL,
        mac_dst CHAR(17) NOT NULL,
        vlan INT(2) UNSIGNED NOT NULL,
        as_src INT(2) UNSIGNED NOT NULL,
        as_dst INT(2) UNSIGNED NOT NULL,
        ip_src CHAR(15) NOT NULL,
        ip_dst CHAR(15) NOT NULL,
        src_port INT(2) UNSIGNED NOT NULL,
        dst_port INT(2) UNSIGNED NOT NULL,
        tcp_flags INT(4) UNSIGNED NOT NULL,
        ip_proto CHAR(6) NOT NULL,
        tos INT(4) UNSIGNED NOT NULL,
        packets INT UNSIGNED NOT NULL,
        bytes BIGINT UNSIGNED NOT NULL,
        flows INT UNSIGNED NOT NULL,
        stamp_inserted DATETIME NOT NULL,
        stamp_updated DATETIME,
        PRIMARY KEY (agent_id, class_id, mac_src, mac_dst, vlan, as_src, as_dst, ip_src, ip_dst, src_port, dst_port, ip_proto, tos, stamp_inserted)
	);
	


Создаём конфиг на базе примеров из /usr/local/share/examples/pmacct
я выбрал pmacctd-sql_v1.conf.example -

Код: Выделить всё

cp /usr/local/share/examples/pmacct/pmacctd-sql_v1.conf.example /usr/local/etc/pmacct.conf
дальше потрошим созданый конфиг

Код: Выделить всё

ee /usr/local/etc/pmacct.conf
правим конфиг до следующего состояния (поменяйте что необходимо)

Код: Выделить всё

	interface: rl1  
	daemonize: false	
	aggregate: src_host,dst_host
	plugins: mysql
	sql_db: unaserver
	sql_table: acct
	sql_table_version: 7
	sql_passwd: 1
	sql_user: pmacct
	sql_refresh_time: 30
	sql_history: 10m
	sql_history_roundoff: mh
	

опции конфига смотреть в файле CONFIG-KEYS в /usr/ports/distfiles/pmacct-0.11.5.tar.gz

пускаем pmacctd с этим конфигом пока не демоном - чтобы оттестить (я обычно пишу полные пути - для крона скриптов и прочего оно полезно)

Код: Выделить всё

/usr/local/sbin/pmacctd -f /usr/local/etc/pmacct.conf
ждём 30 сек(лучше больше) - проверяем не пишет ли ошибок (есть опция дебаг в конфиге - её можно включать если что-то непонятное твориться)
Главное не забыть что через интерфейс должно что-то бегать - пинг к примеру.
Дальше лезем в мускул - смотрим таблицу если что-то появилось, гут - всё запустилось.
Демонизируем (в конфиге выставляем daemonize: true ).

Попускаем немного трафа и посмотрим что организовалось в таблице ( я брал не все поля тк их слишком много чтобы здесь показать все):

Код: Выделить всё

select ip_src,ip_dst,packets,bytes,flows,stamp_inserted,stamp_updated from acct;
()
Получается что-то вроде :

Код: Выделить всё

+----------------+----------------+---------+-------+-------+---------------------+---------------------+
| ip_src         | ip_dst         | packets | bytes | flows | stamp_inserted      | stamp_updated       |
+----------------+----------------+---------+-------+-------+---------------------+---------------------+
| 192.168.0.1    | 192.168.0.100  |     136 | 11424 |     0 | 2009-02-09 19:30:00 | 2009-02-09 19:40:01 |
| 192.168.0.100  | 192.168.0.1    |     136 | 11424 |     0 | 2009-02-09 19:30:00 | 2009-02-09 19:40:01 |
| 192.168.0.1    | 192.168.0.100  |     494 | 41496 |     0 | 2009-02-09 19:40:00 | 2009-02-09 19:48:45 |
| 192.168.0.100  | 192.168.0.1    |     494 | 41496 |     0 | 2009-02-09 19:40:00 | 2009-02-09 19:48:45 |
Тоесть прога агрегирует сколько кто куда передал за определённый промежуток. Таким образом с необходимой точностью можно знать сколько траффа куда ушло.

Решил ещё добавить скрипт в /usr/local/etc/rc.d чтоб грамотно стартовать из /etc/rc.conf
вот что получилось:

Код: Выделить всё

#!/bin/sh

. /etc/rc.subr
name="pmacctd"
pmacctd_enable="${pmacctd_enable:-"NO"}"
rcvar=`set_rcvar`
start_cmd="${name}_start"
stop_cmd="${name}_stop"

load_rc_config $name

pmacctd_start()
{
	echo "pmacctd starting";
	/usr/local/sbin/pmacctd -f /usr/local/etc/pmacct.conf
}

pmacctd_stop()
{
	echo "pmacctd stoping"
	killall pmacctd
}

run_rc_command "$1"
Кидаем это сё в файл /usr/local/etc/rc.d/pmacctd
делаем его выполняемым (работаем исесно испод рута)
chmod 700 /usr/local/etc/rc.d/pmacctd
далее пишем в /etc/rc.conf -
pmacctd_enable="YES"
вуаля -

Код: Выделить всё

10# /usr/local/etc/rc.d/pmacctd start
pmacctd starting
10# /usr/local/etc/rc.d/pmacctd stop
pmacctd stoping
Важно то что скрипт весьма простой и не проводит никаких проверок на пиды , дубликаты и т.д. - это надо учитывать

Всё , можно работать.

З.Ы. Недельку потещу - мот чего подправлю ...

Re: pmaсct (счётчик траффика) - сбор доков

Добавлено: 2009-02-09 14:28:11
hizel
демоны отличаются, тем откуда данные берутся
/usr/local/share/doc/pmacct/FAQS
Q2: 'pmacct', 'pmacctd', 'nfacctd', 'sfacctd' -- but what do they mean ?
A: 'pmacct' is intended to be the name of the project; 'pmacctd' is the name of the
libpcap-based IP accounting and aggregation daemon; 'nfacctd' is the name of the
NetFlow v1/v5/v7/v8/v9 accounting and aggregation daemon which entered the project
starting from version 0.7.0; 'sfacctd' is the name of the sFlow v2/v4/v5 accounting
and aggregation daemon which entered the project starting from version 0.9.0.
что касается принципов работы всего-этого то они не отличаются от принципов работы набора flow-tools

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-11 18:48:36
Alex Keda
намана вроде....

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-11 18:56:05
zg
jabax писал(а):# создаю таблицу
каков запас прочности твоей таблицы? то есть через сколько дней она переполнится и при каком трафике (количестве пользователей)?

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-11 20:19:20
hizel
никто не хранит сырые netflow данные в базе данных
максимум на сутки или во врменной табличке, тригером разгребсти

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-11 23:59:22
jabax
zg писал(а):
jabax писал(а):# создаю таблицу
каков запас прочности твоей таблицы? то есть через сколько дней она переполнится и при каком трафике (количестве пользователей)?

если поставить временной промежуток сутки для аккумуляции трафа , то думаю 2 гб таблицы для ведения статистики на 100 компов до конца жизни хватит.

тут же фишка в том что данные не типа тспдамп а они агрегируются по временным промежуткам как задашь - 10 мин 50 мин и т.д. тем и удобно что хранит статистику с мин объёмом.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 0:54:32
jabax
Народ - у меня тут ещё трабла организовалалась - не страртует при загрузке pmacctd. Стартует и стопится с консоли замечательно, а при загрузке фигу. У кого-нить есть идеи почему? Сроки поджимают , а учить полностью тонкости написания rc.d скриптов нет времени. Скрипт вы видели, в rc.conf сё написано pmacctd_enable="YES" и нифига. Помогите плз.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 7:07:55
zg
hizel писал(а):максимум на сутки или во врменной табличке, тригером разгребсти
что-то в данной статье не видно триггера :Search: или я один такой непродвинутый? :smile:
jabax писал(а):тут же фишка в том что данные не типа тспдамп а они агрегируются по временным промежуткам как задашь - 10 мин 50 мин и т.д. тем и удобно что хранит статистику с мин объёмом.
не вижу, чтобы они удалялись по истечению срока жизни
jabax писал(а):Всё , можно работать.
после этой фразы многие даже и не подумают чего-то там удалять из базы
jabax писал(а):если поставить временной промежуток сутки для аккумуляции трафа , то думаю 2 гб таблицы для ведения статистики на 100 компов до конца жизни хватит.
доведи до логического конца, а то получается как в анекдоте про нипильник. Пусть она у тебя собирает статистику за день, потом дамип в логи, а суммарное потребление в отдельную таблицу, чтобы можно в случае чего и выборки за месяц делать и по времени смотреть кто, когда чего.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 10:26:18
ev
а как сильно он грузит сервер?

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 11:18:06
jabax
доведи до логического конца, а то получается как в анекдоте про нипильник. Пусть она у тебя собирает статистику за день, потом дамип в логи, а суммарное потребление в отдельную таблицу, чтобы можно в случае чего и выборки за месяц делать и по времени смотреть кто, когда чего.
Зг тут такой момент - а если те надо узнать расход трафа к примеру каждый час компом? Как ты это сделаешь с общим счётчиком траффика?
Прога выдаёт сумарное потребление в отдельную таблицу за временные промежутки какие в конфиге поставишь. Хочешь - бут писать о сумме за каждые 10 минут в поле, хочешь, 1-го поля хватит на месяц. Размер базы соответствует точности которая нужна.
не вижу, чтобы они удалялись по истечению срока жизни
Какой ещё срок жизни? Ничего не надо удалять. Как ты посчитаешь за этот временной промежуток траффик точно если ты удалишь данные? Какое-то загадочное непонимание. Я поначалу аж разозлился :)
а как сильно он грузит сервер?
Практически никак. На гигабитном траффе не проверял - но метр в секунду не оказывает никакого воздействия. Если будут тесты на больших скоростях, то напишите тут, а то любопытно.

Народ так помогите плз со скриптами rc.d - не стартует при загрузке у меня софтина. Подскажите плз почему. Вроде всё как надо сделал.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 11:59:20
zg
jabax писал(а): Ничего не надо удалять.
если не удалять, то таблица в конце концов упадёт
jabax писал(а):Размер базы соответствует точности которая нужна.
при точности 10 минут и 20 пользователях при работе 24*7 насколько хватит твоей таблицы?

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 12:21:10
jabax
при точности 10 минут и 20 пользователях при работе 24*7 насколько хватит твоей таблицы?

10000 лет минимум. (считал на 2 гб таблицу, 20 человек, 10 минутные промежутки 2-е записи на каждый ай-пи в 10 минут - на входящий траф и исходящий )

Слух зг - помоги с rc.d скриптом если можешь, буду благодарен. Не стартует при загрузке.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 12:37:56
hizel
запсутите мануально, безе rc.d может вякет чего стоящее

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 12:57:57
jabax
запсутите мануально, безе rc.d может вякет чего стоящее
ручками влёт запускается и если использовать rc.d start / stop тоже, но при загрузке компа не хочет автоматом подсасываться. Думаю мот как-нить непрально переменную не так вызвал. Но я делал сё как написано в этом руководстве -
http://www.freebsd.org.ua/doc/ru_RU.KOI ... RCNG-INTRO

Если кто сталкивался с подобными затыками или видел инфу по ним скажите плз , а то в гугле я уже обыскался...

Вот код рц скрипта - чтоб не искать , стартует руками хорошо а вот при загрузке автоматом не пускается.

Код: Выделить всё

#!/bin/sh

. /etc/rc.subr
name="pmacctd"
pmacctd_enable="${pmacctd_enable:-"NO"}"
rcvar=`set_rcvar`
start_cmd="${name}_start"
stop_cmd="${name}_stop"

load_rc_config $name

pmacctd_start()
{
   echo "pmacctd starting";
   /usr/local/sbin/pmacctd -f /usr/local/etc/pmacct.conf
}

pmacctd_stop()
{
   echo "pmacctd stoping"
   killall pmacctd
}

run_rc_command "$1"
в /etc/rc.conf -
pmacctd_enable="YES"

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 13:19:08
hizel
тоесть из консоли

Код: Выделить всё

/usr/local/sbin/pmacctd -f /usr/local/etc/pmacct.conf
нормально отрабатывается?

включить дебаг rc скриптов и повтыкать ;)

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 13:51:36
jabax

Код: Выделить всё

/usr/local/sbin/pmacctd -f /usr/local/etc/pmacct.conf
да нормально

За дебаг сенкс я что-то забыл что у них есть свой дебаг ) - поковыряю, если найду что-нить, отпишусь

Re: pmaсct (счётчик траффика)

Добавлено: 2009-02-12 13:53:35
hizel
подсказко

Код: Выделить всё

>grep debug /etc/defaults/rc.conf
rc_debug="NO"           # Set to YES to enable debugging output from rc.d

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-05 14:12:22
ev
З.Ы. Недельку потещу - мот чего подправлю ...
ну как работает, стабильно?

еще бы парсить http заголовок и складывать в базу URLы :)

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-05 14:29:49
jabax
стабильно но проблему со стартом я не решил ещё :) - попробую таймаут выставить - поидее он из-за того что мускуль не запущен глючит при старте. А урлы сквид парсит.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-05 15:01:00
zg
jabax писал(а):поидее он из-за того что мускуль не запущен глючит
man rcorder

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-05 16:06:36
hizel
zg писал(а):
jabax писал(а):поидее он из-за того что мускуль не запущен глючит
man rcorder
не всегда работает, например у мя с jabberd тоже самое
такое ощущение что отрабатывается mysqld_safe и система счетает что мускул пущен, а он на самом деле еще не отдуплился до mysqld :cry:

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-05 17:19:41
zg

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-13 11:44:05
jabax
я сегодня тож нашёл решение - сделал по топорному но оно работает
в /etc/rc.d добавляем файл pmacctd

Код: Выделить всё

ee /etc/rc.d/pmacctd
добавляем туда строки :

Код: Выделить всё

/usr/local/sbin/pmacctd -f /usr/local/etc/pmacct.conf
делаем его исполняемым

Код: Выделить всё

chmod +x pmacctd
собсно всё - терь при ребуте он зараза такая стартуется.

Re: pmaсct (счётчик траффика)

Добавлено: 2009-03-13 11:53:28
hizel
кашмар, интересно как такие каки решаются в netbsd