Настройка коллектора в автономном режиме

IPN collector поддерживает NetFlow версий 1, 5 и 7 (9-ая версия не поддерживается), sFlow версии 5, SNMP версий 1 и 2с.

Добавьте в netflow_ipn.properties:

# Загружать логи
load=1

Для приема NetFlow/sFlow-потока добавьте для каждого прослушиваемого порта. Коллектор может принимать данные на несколько портов, при этом на один порт может принимать данные только одного типа (NetFlow или sFlow).

#
collector.capture.flow.port.<listener_id>=<port>
collector.capture.flow.port.<listener_id>.type=<type>
collector.capture.flow.port.<listener_id>.sources=<codes>
collector.capture.flow.port.<listener_id>.thread.count=<count>
#

Где:

  • <listener_id> - уникальный числовой идентификатор слушателя в пределах properties-файла, начинать нумерацию следует с 1, далее последовательно;

  • <port> - прослушиваемый номер порта;

  • <type> - тип потока netflow, либо sflow;

  • <codes> - числовые коды источников через запятую, поток с которых приходит на этого слушателя;

  • <count> - количество потоков-обработчиков на данном порту.

Дополнительно могут быть указаны настройки:

# Размер блока файла/буфера приема для NetFlow/sFlow
datalog.flow.chunk.size=524288
# Сжатие для NetFlow/sFlow логов: 0 - отключено, 1 - zlib
datalog.flow.compression.type=0

Для каждого порта указывается количество потоков, работающих на порту (collector.capture.flow.port.x.thread.count). Эти потоки будут существовать все время работы коллектора, обрабатывая приходящие на порт потоки. Каждый поток хранит буферы приема для каждого источника, пакет которого хотя бы раз обрабатывался источником. Размер буфера равен или почти равен размеру блока буфера приема (datalog.flow.chunk.size).

Таким образом на порт необходимо памяти collector.capture.flow.port.x.thread.count * кол-во источников * datalog.flow.chunk.size. Здесь используется direct buffer memory, а не обычный java heap, по умолчанию максимум 64МБ. Чтобы при необходимости увеличить максимальный объем нужно указать в скрипте запуска -XX:MaxDirectMemorySize=256M. При настройках по умолчанию и 2-х источниках на порт необходимо 10 МБ памяти.

Возможно создать два и более источников с одинаковым IP-адресом и разнести их по разным портам, указав на каждом порту свой источник.

Ниже приведен пример настройки портов коллектора для получения логов источника с кодом 244, высылающим NetFlow-поток на порт 2001 коллектора и источника с кодом 255, высылающего sFlow-поток на порт 2002. Компрессия логов отключена.

# Порт для приема NetFlow-потока
#номер порта
collector.capture.flow.port.1=2001
# Тип потока - NetFlow/sFlow
collector.capture.flow.port.1.type=netflow
# Коды источников, данные с которых будут приниматься на этот порт
collector.capture.flow.port.1.sources=244
# Количество потоков-обработчиков
collector.capture.flow.port.1.thread.count=10
#
# Еще один порт
collector.capture.flow.port.2=2002
collector.capture.flow.port.2.type=sflow
collector.capture.flow.port.2.sources=255
collector.capture.flow.port.2.thread.count=10
#
# Размер блока файла/буфера приема для NetFlow/sFlow
datalog.flow.chunk.size=524288
# Сжатие для NetFlow/sFlow-логов: 0 - отключено, 1 - zlib
datalog.flow.compression.type=0

Коллектор также может опрашивать источник по SNMP на количество трафика на интерфейсах. Для этого необходимо установить опцию collector.capture.snmp=1 и указать обслуживаемые источники. Тип обслуживающих источников должен быть SNMP.

collector.capture.snmp.period=n - период опроса в секундах, т.е. каждые n секунд коллектор будет опрашивать источники. Пример настройки опроса SNMP источников, опрашивается источник с кодом 1:

# Опрашивать SNMP-источники
#collector.capture.snmp=1
# Источники, которые будут опрашиваться
#collector.capture.snmp.sources=1
# Период опроса в секундах
#collector.capture.snmp.period=60

При опросе через SNMP известны только сетевые интерфейсы, ip-адреса, породившие и принявшие трафик, неизвестны. Это необходимо учитывать при составлении привязок услуг. Т.е. все привязки услуг, используемые для классификации трафика, полученного путём съема SNMP-статистики, должны быть с пустым (0.0.0.0-255.255.255.255) фильтром по IP-адресу. Счетчики CNT_IN и CNT_OUT, полученные с интерфейса IF источника преобразуются в две записи о прошедшем трафике:

  • с интерфейса -1 адреса 0 на интерфейс IF адрес 0 прошло CNT_IN байт;

  • с интерфейса IF адреса 0 на интерфейс -1 адрес 0 прошло CNT_OUT байт.

Эти фиктивные записи о трафике далее обрабатываются по обычному алгоритму, они могут быть получены при выгрузке исходного лога в текстовой файл коллектором.

Сбор и сохранение логов происходит в блоки (chunk), которые при заполнении сбрасываются в файл. Размер блока datalog.chunk.size. При обсчете/переходе часа блоки также сбрасываются в файл, при этом пустое пространство заполнено нулями.

При частом обсчете и малом потоке может возникнуть много незаполненного пространства, например: 4 рабочих потока по 524288 собирали логи за 5 минут. Минимальный размер файла будет 2МБ, а нужных данных может быть гораздо меньше. Для оптимизации в таком случае необходимо уменьшить параметр datalog.chunk.size (по умолчанию 512 * 1024 для NetFlow/sFlow и 2 * 1024 для SNMP) или же просто использовать сжатие. Если необходимо указать размер отдельно для NetFlow/sFlow и для SNMP, то можно использовать параметры datalog.flow.chunk.size и datalog.snmp.buffer.size соответсвенно.

Сжатие логов используется для уменьшения потребления дискового пространства. По умолчанию сжатие выключено. Для включения необходимо указать параметр datalog.compression.type=1 (datalog.flow.compression.type отдельно для NetFlow/sFlow и datalog.snmp.compression.type для SNMP).