...
Code Block | ||
---|---|---|
| ||
daemonize: true pidfile: /var/run/hydra/hcd/nfacctd.pid logfile: /var/log/hydra/hcd/nfacctd.log nfacctd_ip: 127.0.0.1 nfacctd_port: 9992 aggregate[agg-ba]: src_net,src_mask,dst_host aggregate[agg-ab]: src_host,dst_net,dst_mask aggregate_filter[agg-ab]: src net 1.2.3.4/17 or src net 5.6.7.8/19 aggregate_filter[agg-ba]: dst net 1.2.3.4/17 or dst net 5.6.7.8/19 plugins: memory[agg-ba], memory[agg-ab] imt_path[agg-ba]: /var/run/hydra/hcd/ipacc-agg-ba.pipe imt_path[agg-ab]: /var/run/hydra/hcd/ipacc-agg-ab.pipe networks_file: /etc/pmacct/networks.lst refresh_maps: true plugin_buffer_size: 50240 plugin_pipe_size: 50240000 imt_buckets: 65537 imt_mem_pools_size: 1024000 |
...
В этом файле необходимо вручную прописать список всех подсетей провайдера в cidrCIDR-нотации, каждая на отдельной строке.
Для файла лога, указанного в параметре logfile
, необходимо настроить ротацию с помощью logrotate
:
Code Block | ||
---|---|---|
| ||
/var/log/hydra/hcd/nfacctd.log {
daily
rotate 90
delaycompress
dateext
missingok
su hcd hcd
postrotate
/usr/bin/killall -HUP nfacctd
endscript
} |
Не следует добавлять демон nfacctd
в автозапуск. Он будет запускаться автоматически агентом HCD с правами системного пользователя hcd
. Поэтому необходимо убедиться, что директория /etc/pmacct
доступна этому пользователю.
Для применения изменений необходимо перезапустить nfacctd
.
Настройка агента HCD
Отредактируйте конфигурационный файл агента HCD, по умолчанию это файл
/etc/hydra/hcd/hcd.conf
Обычно конфигурация по умолчанию подходит и в ней нужно настроить только параметры доступа:Code Block # For Netflow (nfacctd) module current_statistics = on # For custom statistics format module external_statistics = off # Идентификатор коллектора трафика в АСР «Гидра». server id = 37301 # IP-адрес и порт, к которому привязывается встроенный в hcd сервер XML-RPC при запуске. # По этому адресу АСР связывается с hcd для снятия статистики по трафику. # Обратите внимание, что в АСР нужно задать настройки управления коллектором (см. ниже) в соответствии с данными параметрами. server ip = 127.0.0.1 server port = 8888 # Логин и пароль на сервере XML-RPC для управления hcd server login = hydra server password = 123
Обратите внимание что параметры module current_statistics и module external_statistics не могут быть включены одновременно.
Запустите HCD в консольном режиме:
Code Block language bash user@server:~$ sudo /etc/init.d/hсdhcd run
Если все действия выполнены правильно, то должно появиться сообщение об успешном запуске примерно следующего вида:
Code Block InstallSignalHandlers root INFO Installing signal handlers... CreateXMLRPCServer root INFO Initializing XML-RPC server at 127.0.0.1:8888... RunXMLRPCServer root INFO Starting XML-RPC server...
Убедитесь, что процесс
nfacctd
запустился:Code Block language bash user@server:~$ sudo ps aux|grep nfacctd hcd 16035 0.1 0.0 19740 12072 ? S May10 40:31 nfacctd: Core Process [default] hcd 16081 0.0 0.0 23072 14552 ? S May10 26:23 nfacctd: IMT Plugin [agg-ba] hcd 16082 0.0 0.0 20176 11644 ? S May10 26:50 nfacctd: IMT Plugin [agg-ab]
Убедитесь, что Netflow-пакеты поступают в
nfacctd
и агрегируются:Code Block language bash user@server:~$ sudo tcpdump -i eth0 udp port 9992 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 20:06:27.965803 IP 90.151.176.22.23801 > 90.151.179.106.9992: UDP, length 1464 20:06:27.966830 IP 90.151.176.22.23801 > 90.151.179.106.9992: UDP, length 1464 20:06:27.966837 IP 90.151.176.22.23801 > 90.151.179.106.9992: UDP, length 1464
Code Block language bash user@server:~$ /usr/bin/pmacct -s -p /var/run/hydra/hcd/ipacc-agg-ab.pipe | head SRC_IP DST_IP DST_MASK PACKETS BYTES 90.151.179.157 0.0.0.0 0 186 18297 90.151.176.222 90.151.176.0 21 44 7788 10.5.9.12 10.0.0.0 8 2 463 90.151.176.107 0.0.0.0 0 513 239569 ...
Особое внимание следует уделить проверке названий и последовательности полей в первой строке вывода утилиты
pmacct
. Они должны называться именно так и идти именно в том порядке, как показано выше:SRC_IP DST_IP DST_MASK PACKETS BYTES
Если пакеты по какой-то причине не агрегируются, попробуйте проверить настройки iptables.
...
- Введены все абоненты, по которым будет идти трафик (далее — «абоненты»), и для каждого их них выполняются нижеприведённые условия.
- Абонент находится в активном состоянии.
- У абонента заведено оборудование.
- Абонентское оборудование находится в активном состоянии.
- К абонентскому оборудованию привязаны IP-адреса/подсети (если сбор статистики выполняется с помощью Netflow/sFlow).
- У абонента есть лицевой счёт.
- В ПКТ значения "Адрес А" и "Адрес Б" указывают на справочники групп подсетей. В группе подсетей оператора должны быть указаны все подсети используемые оператором связи (синхронизированы с /etc/pmacct/networks.lst).
- У абонента есть договор на оказание услуг в состоянии Актуален.
- К абонентскому договору непосредственно или через базовый договор (поле Базовый договорна форме редактирования договора на оказание услуг) привязан приказ по ценам (далее — «ПЦ») с одним или несколькими тарифными планами.
- ПЦ находится в состоянии Актуален.
- В ПЦ заданы цены и другие характеристики для услуг передачи данных (как правило, они называются Интернет-трафик вх., Локальный трафик вх.и т.д.).
- Для услуг передачи данных в справочнике номенклатуры заданы классы трафика.
- К абонентскому договору непосредственно или через базовый договор (поле Базовый договорна форме редактирования договора на оказание услуг) привязан приказ по ценам (далее — «ПЦ») с одним или несколькими тарифными планами.
- У абонента есть действующая подписка на тарифный план.
- По тарифному плану выставлен инвойс (вкладка Услуги -> Текущие услуги).
- Инвойс находится в состоянии Актуален или Подготовлен.
- Текущая дата попадает в период действия инвойса.
- По тарифному плану выставлен инвойс (вкладка Услуги -> Текущие услуги).
...
Статистика от внешних источников передаётся в HCDв формате CSV, разделитель полей — точка с запятой («;»). Одна строка статистики выглядит следующим образом:
Code Block |
---|
EXT_GOOD_ID; EXT_OBJECT_ID; D_BEGIN; D_END; ADDR_1/MASK_1; ADDR_2/MASK_2; BYTES; |
Название поля | Описание |
---|---|
EXT_GOOD_ID | Идентификатор услуги из АСР «Гидра» |
EXT_OBJECT_ID | Код оборудования из АСР «Гидра» |
D_BEGIN | Дата начала потока данных (Unix timestamp, в UTC) |
D_END | Дата окончания потока данных (Unix timestamp, в UTC) |
ADDR_1/MASK_1 | IP-адрес (подсеть) отправителя и его маска в CIDR-формате. Для IP-адресов значение маски 32 |
ADDR_2/MASK_2 | IP-адрес (подсеть) получателя и его маска в CIDR-формате |
BYTES | Объем данных в байтах |
...
Если для идентификации услуги и оборудования в статистике используются поля EXT_OBJECT_ID
и EXT_GOOD_ID
, то статистику и по входящему, и по исходящему трафику можно передавать в одном файле, и в аргумент <statistics name>
передавать agg-ab
. Если же услуга и оборудование определяются по IP-адресам (ADDR_1/MASK_1
и ADDR_2/MASK_2
), то нужно разделять статистику на два файла и загружать её в HCD в два приема — в одном файле должна быть статистика по исходящему трафику (agg-ab
), а во втором — по входящему (agg-ba
).
Пример:
Code Block | ||
---|---|---|
| ||
user@server:~$ hcdctl.py -f /tmp/stat-out.txt -u http://hydra:q123@127.0.0.1:8888 putfile agg-ab user@server:~$ hcdctl.py -f /tmp/stat-in.txt -u http://hydra:q123@127.0.0.1:8888 putfile agg-ba |
...
При необходимости значение параметра можно еще увеличить.
На этапе настройки HCD, если очень хочется его проверить сразу, можно не дожидаться, пока клиент настроит отправку netflow и попинать его вручную вот этим. На машине с докером выполняем
Code Block |
---|
docker run -it --rm networkstatic/nflow-generator -t {адрес сервера предбиллинга} -p 9992 |