Назначение
Для сбора статистики по IP-трафику в АСР «Гидра» существует специализированный агент — HCD (Hydra Collector Daemon). Этот агент принимает статистику по трафику от различных источников, преобразует её во внутренний формат и передаёт в ядро АСР для тарификации.
Поддерживаемые источники данных
- Агрегатор NetFlow / sFlow pmacct. Для агрегации статистики, поступающей по протоколу NetFlow, используется входящий в состав
pmacct
демонnfacctd
, а для агрегации статистики, поступающей по протоколу sFlow —sfacctd
. - Другие источники (текстовый формат, описанный в разделе Формат данных для передачи статистики ).
Предварительные требования
Для установки агента HCD необходимо, чтобы на сервере должен быть подключён репозиторий компании Латера (deb.latera.ru
). Данный репозиторий подключается сотрудниками компании Латера в рамках технической поддержки.
Установка pmacct и HCD
В случае, когда статистика поступает не по протоколам NetFlow и sFlow, pmacct
устанавливать и настраивать не требуется.
Обновление списка пакетов:
user@server:~$ sudo aptitude update
- Установка агента:
Установка последней версии агента:
Последняя версия агента может быть не совместима с версий ядра биллинговой системы Гидра, установленной на вашем сервере
user@server:~$ sudo aptitude install <hcd_package_name>
Вместо
hcd_package_name
укажитеhcd
для установки основного экземпляра агента илиhcd-testing
для установки тестового экземпляра агента.
Установка заданной версии
user@server:~$ sudo aptitude install <hcd_package_name>=<hcd_version>
Вместо
hcd_package_name
укажитеhcd
для установки основного экземпляра агента илиhcd-testing
для установки тестового экземпляра агента.Вместо
hcd_version
— необходимую версия агента HCD.
Настройка nfacctd
1. Создайте файл /etc/pmacct/nfacctd.conf
следующего содержания:
Здесь самыми важными являются параметры nfacctd_ip
и nfacctd_port
, в которых нужно указать IP-адрес (рекомендуется использовать внешний адрес вместо localhost) и номер UDP-порта, на который поступают пакеты Netflow. Значения прочих настроек, как правило, можно оставить по умолчанию.
Название агрегатора, которое пишется в квадратных скобках, если убрать из него -ab
(признак исходящего трафика) или -ba
(признак входящего трафика), должно совпадать с кодом агрегатора в АСР «Гидра». Стандартным названием агрегатора, начиная с версии АСР «Гидра» 2.1.15, является agg
.
Параметр aggregate_filter
нужен для того, чтобы отфильтровать среди всех входящих Netflow-пакетов только нужные, а также для разделения входящего (ba) и исходящего (ab) трафика. Подсети в фильтрах нужно задавать те, в которых находятся абоненты. Синтаксис фильтра стандартный из библиотеки 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 0.0.0.0/0
2. Не следует добавлять демон nfacctd
в автозапуск. Он будет запускаться автоматически агентом hcd
с правами системного пользователя hcd
. Поэтому необходимо убедиться, что следующие каталоги/файлы доступны этому пользователю с правами чтения и записи:
- /var/run/hydra/
- /etc/pmacct/networks.lst
Настройка агента hcd
1. Агент hcd
уже должен быть установлен на сервере. Обычно он находится в каталоге /opt/hcd
. Убедитесь, что для пользователя hcd доступны на чтение и запись следующие каталоги/файлы:
- /var/log/hcd/
- /etc/hydra/hcd.conf
2. Убедитесь, что демон hcd добавлен в автозапуск (Gentoo: rc-status|grep hcd
, Debian/Ubuntu: ls -al /etc/rc4.d/|grep hcd
)
3. Отредактируйте конфигурационный файл агента hcd
/etc/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 не могут быть включены одновременно.
4. Запустите hcd
в консольном режиме:
# /etc/init.d/hcd run
Если все действия выполнены правильно, то должно появиться сообщение об успешном запуске примерно следующего вида:
30.05.2011 19:06:12 CheckPIDAlive root DEBUG PID 16035 is running 30.05.2011 19:06:12 __init__ root INFO Attached to running aggregator (pid 16035) 30.05.2011 19:06:12 CreateXMLRPCServer root INFO Initializing XML-RPC server at 127.0.0.1:8888... 30.05.2011 19:06:12 RunXMLRPCServer root INFO Starting XML-RPC server...
Убедитесь, что процесс nfacctd
запустился:
# 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]
5. Убедитесь, что Netflow-пакеты поступают в nfacctd
и агрегируются:
# 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
$ /usr/bin/pmacct -s -p /var/run/hydra/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.
Настройка АСР «Гидра»
1. Войдите в АСР «Гидра».
2. Найдите коллектор трафика (Справочники -> Агенты -> Коллекторы трафика) и откройте форму его редактирования. Обычно он в системе уже существует и называется Главный коллектор.
3. Введите настройки управления коллектором в соответствии с настройками, заданными в файле hcd.conf
, и сохраните их:
4. Откройте вкладку Компоненты. Там должен быть один компонент с кодом agg. Откройте форму его редактирования и привяжите к агрегатору все услуги передачи данных, которые будут с его помощью тарифицироваться:
5. Сохраните привязанные к агрегатору услуги, убедитесь, что агрегатор находится в состоянии Активный и вернитесь на вкладку Общие данные.
6. Установите галочку Обработка статистики по трафику в реальном времени. Убедитесь, что коллектор также находится в состоянии Активный и сохраните настройки. В нижней части страницы должно появиться сообщение вида Создана задача «Получение текущей статистики коллектора трафика Главный коллектор».
Подготовка к запуску
1. В АСР «Гидра» откройте форму редактирования параметров фирмы(Администрирование -> Параметры -> Параметры фирмы) и установите значение параметра Минимальный объём IP-трафика за сеанс для попадания в неучтённый, Мб в 0. Это позволит в случае возникновения ошибок тарификации определить их причину.
2. В случае, если hcd
и АСР «Гидра» находятся на разных серверах, убедитесь, что системное время на этих серверах синхронизируется по протоколу NTP и разница системного времени между серверами составляет не более 1 секунды.
3. Убедитесь, что в АСР выполнены все условия для успешной тарификации трафика:
- Введены все абоненты, по которым будет идти трафик (далее — «абоненты»), и для каждого их них выполняются нижеприведённые условия.
- Абонент находится в активном состоянии.
- У абонента заведено оборудование.
- Абонентское оборудование находится в активном состоянии.
- К абонентскому оборудованию привязаны IP-адреса/подсети (если сбор статистики выполняется с помощью Netflow/sFlow).
- У абонента есть лицевой счёт.
- У абонента есть договор на оказание услуг в состоянии Актуален.
- К абонентскому договору непосредственно или через базовый договор (поле Базовый договорна форме редактирования договора на оказание услуг) привязан приказ по ценам (далее — «ПЦ») с одним или несколькими тарифными планами.
- ПЦ находится в состоянии Актуален.
- В ПЦ заданы цены и другие характеристики для услуг передачи данных (как правило, они называются Интернет-трафик вх., Локальный трафик вх.и т.д.).
- Для услуг передачи данных в справочнике номенклатуры заданы классы трафика.
- К абонентскому договору непосредственно или через базовый договор (поле Базовый договорна форме редактирования договора на оказание услуг) привязан приказ по ценам (далее — «ПЦ») с одним или несколькими тарифными планами.
- У абонента есть действующая подписка на тарифный план.
- По тарифному плану выставлен инвойс (вкладка Услуги -> Текущие услуги).
- Инвойс находится в состоянии Актуален или Подготовлен.
- Текущая дата попадает в период действия инвойса.
- По тарифному плану выставлен инвойс (вкладка Услуги -> Текущие услуги).
Запуск и тестирование
1. Запустите задание Получение текущей статистики коллектора трафика Главный коллектор (Администрирование -> Задания или форма редактирования коллектора трафика, вкладка Задания). Дождитесь завершения сеанса.
2. Проверьте логи выполнения задания на интерфейсе. Как правило, при первом запуске выдается информация о том, что был обнаружен неучтенный трафик.
Возможные ошибки при выполнении задания:
- TNS:no listener (TNS: нет прослушивателя). АСР не может установить сетевое соединение с агентом
hcd
по указанным в настройках реквизитам. Проверьте настройки.
Анализ неучтенного трафика
1. Войдите в АСР «Гидра» и откройте отчёт по неучтённому трафику (Отчёты -> Неучтённый трафик).
2. Установите подходящий фильтр по периоду и добавьте в настройки отчёта следующие аналитики:
- Направление
- Объём (СУММ)
- Услуга
- IP/Подсеть A
- Маска подсети A
- IP/Подсеть B
- Маска подсети B
- Причина
- Объект
3. Запустите отчёт и дождитесь его выполнения.
4. Если в результатах отчёта нет ни одной строки, это может объясняться следующими причинами:
- Не настроен параметр Минимальный объём 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 = on 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-адресу.
Передача статистики
Статистика от внешних источников поступает в hcd
с помощью утилиты hcdctl
, входящей в состав этого пакета. Вызывать её нужно следующим образом:
$ hcdctl.py [OPTIONS] putfile <statistics name>
В качестве опций обычно нужно указывать:
-f <имя файла статистики>
-u http
s
://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
).
Пример:
$ hcdctl.py -f /tmp/stat-out.txt -u http://hydra:q123@127.0.0.1:8888 putfile agg-ab $ hcdctl.py -f /tmp/stat-in.txt -u http://hydra:q123@127.0.0.1:8888 putfile agg-ba