К netgraph часто обращаются именно из-за необходимости подсчета трафика. Получать статистику можно несколькими способами, задействуя разные модули. Например, «врежем» модуль ng_tee в le0 между lower и upper уровнями Ethernet интерфейса. Этот модуль имеет такую же функциональность, как и стандартная утилита tee, дублирующая ввод.
Вручную его загружать не требуется, ядро это делает автоматически при первом обращении к нему. Крючки right и left являются стандартными для этого модуля и показывают, с какой стороны мы его подключаем (подробности в «man 4 ng_tee»).
# ngctl mkpeer le0: tee lower right
# ngctl name le0:lower le0_tee
# ngctl connect le0: lower upper left
Проверяем настройки:
# ngctl show le0:
Name: le0 Type: ether ID: 00000003 Num hooks: 2
Local hook Peer name Peer type Peer ID Peer hook
———- ——— ——— ——- ———
upper le0_tee tee 00000006 left
lower le0_tee tee 00000006 right
Чтобы получить статистику, нужно отправить сообщение getstats:
# ngctl msg le0:lower getstats
Rec’d response «getstats» (1) from «[6]:»:
Args: { right={ inOctets=275355 inFrames=2796 outOctets=12961 outFrames=118 } left={ inOctets=12961 inFrames=118 outOctets=239292 outFrames=2427 } }
# ngctl msg le0:upper getstats
Rec’d response «getstats» (1) from «[6]:»:
Args: { right={ inOctets=283635 inFrames=2872 outOctets=17061 outFrames=166 } left={ inOctets=17061 inFrames=166 outOctets=247572 outFrames=2503 } }
Более подробную информацию о проходящем трафике способен показать узел ng_netflow(4).

Итоговая информация экспортируется в виде, совместимом с популярным протоколом NetFlow компании Cisco. Поэтому для ее анализа можно использовать любой коллектор, поддерживающий этот протокол. Кстати, кроме ng_netflow есть еще ng_ipacct, но он не входит в стандартную поставку, а последняя версия на сайте ftp.wuppy.net.ru/pub/FreeBSD/local/kernel/ng_ipacct датирована декабрем 2006 года, поэтому не будем на нем останавливаться.
Существует несколько схем подключения ng_netflow, мы разберем только одну из них. Начинаем:
# ngctl mkpeer le0: tee lower left
# ngctl connect le0: le0:lower upper right
Создаем many-узел при помощи ng_one2many и подключаемся к нему:
# ngctl mkpeer le0:lower one2many left2right many0
# ngctl connect le0:lower.left2right right2left many1
Даем имя o2m узлу le0:lower.right2left:
# ngctl name le0:lower.right2left o2m
Создаем на o2m узел типа netflow с именем netflow:
# ngctl mkpeer o2m: netflow one iface0
# ngctl name o2m:one netflow
И узел ksocket на «netflow:» для экспорта:
# ngctl mkpeer netflow: ksocket export inet/dgram/udp
# ngctl msg netflow:export connect inet/192.168.1.100:1111
Теперь для проверки вводим «ngctl list». Если модули загружены, запрашиваем таблицу подключений netflow:
# ngctl show netflow
Далее устанавливаем одну из утилит-коллекторов. Список некоторых коллекторов приведен на странице www.cse.wustl.edu/~cs5/567/traffic/index.html. Поиск в портах FreeBSD также дает нужный результат:
$ cd /usr/ports/
$ make search key=netflow
Например, выбираем flow-tools:
# cd /usr/ports/net-mgmt/flow-tools
# make install
Захватываем пакеты с созданного сокета (подробная документация о flow-tools есть на сайте www.splintered.net/sw/flow-tools/docs/):
# mkdir /var/netflows
# /usr/local/bin/flow-capture -p /var/run/flow-capture.pid \
-n 24 -N 0 -w /var/netflows/ -S 0/192.168.1.100/1111
После этого в каталог /var/netflows будет складываться захваченная статистика, каждый час будет создаваться новый файл (-n 24). Файлы имеют бинарный формат, поэтому для просмотра используем специальные утилиты из комплекта flow-tools. Ключ ‘-f‘ указывает на формат вывода, при значении 10 будет выведен адрес источника и назначения, ключ ‘-S‘ отвечает за поле сортировки:
# /usr/local/bin/flow-cat -p /var/netflows/ | /usr/local/bin/flow-stat -f10 -S4 -P
//
эта схема будет работать с ng интерфейсами?
//
Если уж на то пошло, то почему
/usr/ports/net-mgmt/flow-tools
а не
/usr/ports/net-mgmt/flow-tools-ng ?
//
Ну, и чего тут нового? все это в разных оформлении бегает по инету. Вот если бы был скажем представлен вариант для двух и более интерфейсов.
Только что приучил flow-tools класть все это дело не в бинарный лог, а сразу в mysql
———————-
>эта схема будет работать с ng интерфейсами?
зачем там в mpd есть два ключа для геренриции flow статистики исх/вхд трафика. Кажись вот этот линк
———————-
В общем они вроде только в версиях различаются.
http://mpd.sourceforge.net/doc5/mpd33.html#33
———————-
flow-tools-ng это кажется как раз для снятия с
//
Я разбирался с netgraph, что нарыл то и выложил. Есть еще записи, переберу, дополню.