Назначение
Для сбора статистики по IP-трафику в АСР «Гидра» существует специализированный агент — HCD (Hydra Collector Daemon). Этот агент принимает статистику по трафику от различных источников, преобразует её во внутренний формат и передаёт в ядро АСР для тарификации.
Поддерживаемые источники данных
- Агрегатор NetFlow v5 / sFlow pmacct. Для агрегации статистики, поступающей по протоколу NetFlow, используется входящий в состав pmacctдемонnfacctd, а для агрегации статистики, поступающей по протоколу sFlow —sfacctd.
- Другие источники (текстовый формат, описанный в разделе Формат данных для передачи статистики).
Установка pmacct и HCD
В случае, когда статистика поступает не по протоколам NetFlow и sFlow, pmacct устанавливать и настраивать не требуется.
- Установка агента HCD достаточно проста и описана во вложенной статье. 
- Установка - pmacct:- user@server:~$ sudo aptitude update \\ sudo aptitude install pmacct
Настройка nfacctd
Отредактируйте файл /etc/pmacct/nfacctd.conf
Здесь самыми важными являются параметры nfacctd_ip и nfacctd_port, в которых нужно указать IP-адрес (рекомендуется использовать внешний адрес вместо localhost) и номер UDP-порта, на который поступают пакеты NetFlow. Значения прочих настроек, как правило, можно оставить по умолчанию.
Название агрегатора, которое пишется в квадратных скобках, если убрать из него -ab (признак исходящего трафика) или -ba (признак входящего трафика), должно совпадать с кодом агрегатора в АСР «Гидра». Стандартным названием агрегатора, начиная с версии АСР «Гидра» 2.1.15, является agg.
Параметр aggregate_filter нужен для того, чтобы отфильтровать среди всех входящих NetFlow-пакетов только нужные, а также для разделения входящего (ba) и исходящего (ab) трафика. Подсети в фильтрах нужно задавать те, в которых находятся абоненты. В приведённой выше конфигурации это подсети 1.2.3.4/17 и 5.6.7.8/19. Синтаксис фильтра стандартный из библиотеки libpcap (используется в tcpdump, wireshark и т. д.). Обычно фильтр для исходящего трафика выглядит следующим образом (см. пример конфига выше):
aggregate_filter[agg-ab]: src net X or src net Y ... or src net Z
Фильтр для входящего трафика выглядит аналогично, только вместо конструкций ... or src net ... используется ... or dst net ....
Файл /etc/pmacct/networks.lst необходим для указания подсетей, используемых при агрегации:
! Список используемых подсетей (включая серые) 1.2.3.4/17 5.6.7.8/19
В этом файле необходимо вручную прописать список всех подсетей провайдера в CIDR-нотации, каждая на отдельной строке.
Для файла лога, указанного в параметре logfile, необходимо настроить ротацию с помощью logrotate:
/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Обычно конфигурация по умолчанию подходит и в ней нужно настроить только параметры доступа:- # 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 в консольном режиме: - user@server:~$ sudo /etc/init.d/hcd run - Если все действия выполнены правильно, то должно появиться сообщение об успешном запуске примерно следующего вида: - 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запустился:- 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и агрегируются:- 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 - 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.
Настройка АСР «Гидра»
- Войдите в АСР «Гидра».
- Найдите коллектор трафика (Оборудование -> Агенты -> Коллекторы трафика) и откройте форму его редактирования. Обычно он в системе уже существует и называется Collector.
- Введите настройки управления коллектором в соответствии с настройками, заданными в файле hcd.conf, и сохраните их:
- Откройте вкладку Состав. Там должен быть один компонент с кодом agg. Откройте форму его редактирования и привяжите к агрегатору все услуги передачи данных, которые будут с его помощью тарифицироваться:
- Сохраните привязанные к агрегатору услуги, убедитесь, что агрегатор находится в состоянии Активный и вернитесь на вкладку Общие данные.
- Установите галочку Обработка статистики по трафику в реальном времени. Убедитесь, что коллектор также находится в состоянии Активный и сохраните настройки. В нижней части страницы должно появиться сообщение вида Создана задача «Получение текущей статистики коллектора трафика Главный коллектор».
Подготовка к запуску
- В АСР «Гидра» откройте форму редактирования параметров фирмы(Администрирование -> Параметры -> Параметры фирмы) и установите значение параметра Минимальный объём IP-трафика за сеанс для попадания в неучтённый, Мб в 0. Это позволит в случае возникновения ошибок тарификации определить их причину.
- В случае, если HCD и АСР «Гидра» находятся на разных серверах, убедитесь, что системное время на этих серверах синхронизируется по протоколу NTP и разница системного времени между серверами составляет не более 1 секунды.
- Убедитесь, что в АСР выполнены все условия для успешной тарификации трафика:
- Введены все абоненты, по которым будет идти трафик (далее — «абоненты»), и для каждого их них выполняются нижеприведённые условия.
- Абонент находится в активном состоянии.
- У абонента заведено оборудование.- Абонентское оборудование находится в активном состоянии.
- К абонентскому оборудованию привязаны IP-адреса/подсети (если сбор статистики выполняется с помощью Netflow/sFlow).
 
- У абонента есть лицевой счёт.
- В ПКТ значения "Адрес А" и "Адрес Б" указывают на справочники групп подсетей. В группе подсетей оператора должны быть указаны все подсети используемые оператором связи (синхронизированы с /etc/pmacct/networks.lst).
- У абонента есть договор на оказание услуг в состоянии Актуален.- К абонентскому договору непосредственно или через базовый договор (поле Базовый договорна форме редактирования договора на оказание услуг) привязан приказ по ценам (далее — «ПЦ») с одним или несколькими тарифными планами.- ПЦ находится в состоянии Актуален.
- В ПЦ заданы цены и другие характеристики для услуг передачи данных (как правило, они называются Интернет-трафик вх., Локальный трафик вх.и т.д.).- Для услуг передачи данных в справочнике номенклатуры заданы классы трафика.
 
 
 
- К абонентскому договору непосредственно или через базовый договор (поле Базовый договорна форме редактирования договора на оказание услуг) привязан приказ по ценам (далее — «ПЦ») с одним или несколькими тарифными планами.
- У абонента есть действующая подписка на тарифный план.- По тарифному плану выставлен инвойс (вкладка Услуги -> Текущие услуги).- Инвойс находится в состоянии Актуален или Подготовлен.
- Текущая дата попадает в период действия инвойса.
 
 
- По тарифному плану выставлен инвойс (вкладка Услуги -> Текущие услуги).
Запуск и тестирование
- Запустите задание Получение текущей статистики коллектора трафика Главный коллектор (Администрирование -> Задания или форма редактирования коллектора трафика, вкладка Задания). Дождитесь завершения сеанса.
- Проверьте логи выполнения задания на интерфейсе. Как правило, при первом запуске выдается информация о том, что был обнаружен неучтенный трафик.
Возможные ошибки при выполнении задания:
- TNS:no listener (TNS: нет прослушивателя). АСР не может установить сетевое соединение с агентом HCD по указанным в настройках реквизитам. Проверьте настройки.
Анализ неучтенного трафика
- Войдите в АСР «Гидра» и откройте отчёт по неучтённому трафику (Отчёты -> Неучтённый трафик).
- Установите подходящий фильтр по периоду и добавьте в настройки отчёта следующие аналитики:- Направление
- Объём (СУММ)
- Услуга
- IP/Подсеть A
- Маска подсети A
- IP/Подсеть B
- Маска подсети B
- Причина
- Объект
 
- Запустите отчёт и дождитесь его выполнения.
- Если в результатах отчёта нет ни одной строки, это может объясняться следующими причинами:- Не настроен параметр Минимальный объём IP-трафика за сеанс для попадания в неучтённый (см. #Подготовка к запуску).
- Дата/время данных по трафику не попадает в период, за который сделан отчёт.
- Статистика по трафику не поступает в АСР.
- Весь трафик был успешно тарифицирован.
 
Передача статистики из внешнего источника
Предназначение
Агент hcd позволяет собирать статистику не только с помощью протоколов NetFlow/sFlow, но и из любых других источников, например, от интеллектуальных устройств Cisco SCE (формат RDR). Также эта функция полезна при использовании АСР «Гидра» в датацентрах и у крупных операторов связи, где поток пакетов NetFlow, поступающий с маршрутизаторов, превышает 20-30 МБит/с. При таких объемах трафика демон nfacctd может не успевать обрабатывать все поступающие на него пакеты NetFlow. В этом случае рекомендуется использовать пакет flow-tools, собирать NetFlow в архив и периодически делать по нему отчеты с помощью утилиты flow-report, результаты которой передавать в HCD с помощью функции загрузки статистики с внешнего источника.
Отличия в настройке HCD
Конфигурация HCD отличается от стандартной тем, что в данном случае не используется pmacct. Соответственно, помимо стандартных настроек в файле hcd.conf нужно сделать еще следующие:
module current_statistics = off module external_statistics = on # (по умолчанию отключено) # ... aggregator autostart = off aggregator autoattach = off
Формат данных для передачи статистики
Статистика от внешних источников передаётся в HCDв формате CSV, разделитель полей — точка с запятой («;»). Одна строка статистики выглядит следующим образом:
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 | Объем данных в байтах | 
Пример:
39501;;1291242554;1291242554;10.5.10.6/32;0.0.0.0/0;900
Если оборудование передает статистику по входящему и исходящему трафику в одном пакете, то на каждый пакет данных от оборудования должно приходиться две строки для передачи в HCD— для входящего трафика одна строка (например, услуга Интернет вх.), для исходящего — вторая (Интернет исх.).
Если для каждой строки статистики заданы поля EXT_OBJECT_ID и EXT_GOOD_ID, то поля ADDR_1/MASK_1 и ADDR_2/MASK_2 можно оставить пустыми. Если же код оборудования и ID услуги неизвестны, то адреса и маски нужно обязательно указывать, чтобы АСР смогла подобрать услугу по классам трафика (задаются в настройках услуг в справочнике номенклатуры), а оборудование — по IP-адресу.
Примечание. Для успешной тарификации трафика загружаемого из файла поле ADDR_2/MASK_2 должно в точности соответствовать значению поля "Адрес Б" из состава действующего ПКТ. Использование групп подсетей в качестве адреса Б в ПКТ будет невозможно.
Передача статистики
Статистика от внешних источников поступает в HCD с помощью утилиты hcdctl
user@server:~$ hcdctl.py [OPTIONS] putfile <statistics name>
В качестве опций обычно нужно указывать:
- -f <имя файла статистики>
- -u http- ://user:password@host:port(для авторизации на HCD)
В аргументе <statistics name> нужно передавать название статистики. Оно состоит из кода агрегатора в АСР (обычно agg) и окончивается на -ab (для статистики по исходящему трафику) или -ba (для статистики по входящему трафику).
Если для идентификации услуги и оборудования в статистике используются поля EXT_OBJECT_ID и EXT_GOOD_ID, то статистику и по входящему, и по исходящему трафику можно передавать в одном файле, и в аргумент <statistics name> передавать agg-ab. Если же услуга и оборудование определяются по IP-адресам (ADDR_1/MASK_1 и ADDR_2/MASK_2), то нужно разделять статистику на два файла и загружать её в HCD в два приема — в одном файле должна быть статистика по исходящему трафику (agg-ab), а во втором — по входящему (agg-ba).
Пример:
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
Примечания
При возникновении ошибки переполнения буфера записи:
WARN ( agg-print/print ): Unable to write data: try with a larger 'print_cache_entries' value.
необходимо добавить в /etc/pmacct/nfacctd.conf строку:
print_cache_entries[agg-ab]: 32771
где agg-ab - название агрегатора, после чего выполнить перезапуск агентов и проверить их работу:
user@server:~$ sudo /etc/init.d/ncd stop user@server:~$ sudo /etc/init.d/nfacct stop user@server:~$ sudo /etc/init.d/hcd start user@server:~$ sudo ps aux | grep nfacctd
При необходимости значение параметра можно еще увеличить.
На этапе настройки HCD, если очень хочется его проверить сразу, можно не дожидаться, пока клиент настроит отправку netflow и попинать его вручную вот этим. На машине с докером выполняем
docker run -it --rm networkstatic/nflow-generator -t {адрес сервера предбиллинга} -p 9992

