cd /usr/ports/net-mgmt/ng_ipacct make install clean
Оставляем опции по умолчаниюТут можно добавить: в руководствах рекомендуют при каждой следующей пересборке ядра ставить ng_ipacct снова т.к. это все таки модуль ядра и пересборке он удаляется, но исходя из личного опыти после пересборки ядрая я забывал ставить ng_ipacct и тем не менее его модуль загружался и он работал.Далее правим конфиг /usr/local/etc/ng_ipacct.conf
# указываем интерфейс на котором считать трафик # не забываем менять bce1 во всем конфиг файле,
# еще ниже встречается несколько раз ng_ipacct_interfaces="bce1" ng_ipacct_modules_load="YES" ng_ipacct_modules_list="netgraph ng_ether ng_ipacct" ng_ipacct_default_ether_start=' mkpeer %%iface%%: tee lower right name %%iface%%:lower %%iface%%_tee connect %%iface%%: lower upper left mkpeer %%iface%%_tee: ipacct right2left %%iface%%_in name %%iface%%_tee:right2left %%iface%%_ip_acct connect %%iface%%_tee: %%iface%%_ip_acct: left2right %%iface%%_out ' ng_ipacct_default_ether_stop=' shutdown %%iface%%_ip_acct: shutdown %%iface%%_tee: shutdown %%iface%%: ' ng_ipacct_bpf_ether_start=' mkpeer %%iface%%: tee lower right name %%iface%%:lower %%iface%%_tee connect %%iface%%: lower upper left mkpeer %%iface%%_tee: bpf right2left %%iface%%_in name %%iface%%_tee:right2left %%iface%%_bpf connect %%iface%%_tee: right2left left2right %%iface%%_out mkpeer %%iface%%_bpf: ipacct %%iface%%_match_in %%iface%%_in name %%iface%%_bpf:%%iface%%_match_in %%iface%%_ip_acct connect %%iface%%_bpf: %%iface%%_ip_acct: %%iface%%_match_out %%iface%%_out ' ng_ipacct_bpf_ether_stop=' shutdown %%iface%%_ip_acct: shutdown %%iface%%_bpf: shutdown %%iface%%_tee: shutdown %%iface%%: ' ng_ipacct_bce1_dlt="EN10MB" # required line; see ipacctctl(8) # 10000 записей будет хранится в памяти. чем больше
# RAM тем больше можно ставить значение # из личного опыта 10000 записей при сбросе дампа # каждые 2 минуты хватает даже при больших нагрузках канала # в том случае если будет превышено значение и все 10000
# будут заполнены # все лишние записи просто не будут учитыватся и статистика "пропадет" ng_ipacct_bce1_threshold="10000" # '5000' by default ng_ipacct_bce1_verbose="yes" # 'yes' by default ng_ipacct_bce1_start=${ng_ipacct_default_ether_start} ng_ipacct_bce1_stop=${ng_ipacct_default_ether_stop} # указываем на имя скрипта для сброса лога ng_ipacct_bce1_checkpoint_script="/var/asut/ipacct.sh bce1"
содержимое скрипта /var/asut/ipacct.shэтот скрипт заставляет ng_ipacct сбросить собранную статистику в файл лога
#!/bin/sh IPACCTCTL="/usr/local/sbin/ipacctctl" IFACE=$1 # каталог куда скидывать лог файл DIR=/var/asut/ipacct if [ ! -e "$DIR" ]; then mkdir $DIR fi NAME="ng_ipacct.log" $IPACCTCTL ${IFACE}_ip_acct:$IFACE checkpoint $IPACCTCTL ${IFACE}_ip_acct:$IFACE show >> $DIR/$NAME $IPACCTCTL ${IFACE}_ip_acct:$IFACE clear /usr/bin/tail -1 $DIR/$NAME | /usr/bin/fgrep exceed
Для того чтобы заставить ng_ipacct сбрасывать дамп теперь нужно выполнить команду
/usr/local/etc/rc.d/ng_ipacct checkpoint
Желательно добавить ее в /etc/cron
echo ' */2 * * * * root /usr/local/etc/rc.d/ng_ipacct checkpoint ' >> /etc/cron /etc/rc.d/cron restart
Вот пример лога
192.168.0.222 1245 195.24.228.3 22 6 199 8428 192.168.0.222 1462 195.24.228.3 22 6 18 772 192.168.0.222 1458 195.151.80.6 22 6 112 4688 192.168.0.222 1731 195.24.228.2 110 6 2 88 192.168.0.222 1464 195.151.80.6 22 6 18 824 192.168.0.222 4567 192.168.0.28 4582 6 13 760 195.24.228.3 22 192.168.0.222 1245 6 351 105260 195.24.228.3 22 192.168.0.222 1462 6 19 11632 195.151.80.6 22 192.168.0.222 1458 6 191 49240 195.24.228.2 110 192.168.0.222 1731 6 1 48 195.151.80.6 22 192.168.0.222 1464 6 20 13544 192.168.0.28 4582 192.168.0.222 4567 6 18 2228
столбцы слева нправо:
адрес источника порт источника адрес получателя порт получателя номер протокола (6-tcp) пакетов байт
Все! Осталось добавить в /etc/rc.conf
echo ' ng_ipacct_enable="YES" ' >> /etc/rc.conf
Возможно после загрузки будут сыпатся сообщения типа
root: /etc/rc: WARNING: can not load kld module netgraph kernel: module_register: module ng_ether already exists! kernel: Module ng_ether failed to register: 17 root: /etc/rc: WARNING: can not load kld module ng_ether
тем не менее ng_ipacct работает стабильно не на одном десятке серверов :)Часть 2. Парсер логов в мускулв разработке... скоро допишу :)