Обработчик управления устройством с синхронизацией интерфейсов и их индексов
Материал из BiTel WiKi
Версия от 07:37, 23 декабря 2013; Cromeshnic (Обсуждение | вклад)
Содержание |
Описание
Класс - обработчик управления устройством по SNMP (DeviceManager) взамен стандартного.
- Умеет выдавать uptime, как и стандартный SnmpDeviceManager.
- Умеет синхронизировать интерфейсы устройства и их snmp-индексы (нужны для учёта flow)
Как пользоваться
- Скачиваем библиотеку snmp4j[1] (я использовал snmp4j-2.2.3.jar[2]).
- Копируем snmp4j-2.2.3.jar (или другую версию) в /usr/local/BGBillingServer/lib/app
- Рестартуем сервер биллинга
- Делаем ./update в BGInetAccess и BGInetAccounting и рестартуем их
- Копируем себе в динамический код классы:
ru.dsi.bgbilling.modules.inet.dyn.device.snmp.IfaceSnmpDeviceManager ru.dsi.bgbilling.modules.inet.dyn.device.snmp.SnmpDeviceManager ru.dsi.bgbilling.modules.inet.dyn.device.snmp.SnmpClient
- Компилируем динамический код
- Указываем в типе устройства модуля Inet "Обработчик управления устройством: ru.dsi.bgbilling.modules.inet.dyn.device.snmp.IfaceSnmpDeviceManager"
- Настраиваем конфигурацию устройства/типа устройства/родительского устройства (по усмотрению) - см раздел "Конфигурация"
- Перечитываем конфигурацию устройств
- Заходим в устройство с нашим обработчиком, кликаем правой кнопкой, выбираем "выполнить команду", пишем ifsync, смотрим результат:
Принцип работы
Обработчик поддерживает команды:
- uptime - аналогично стандартному обработчику, возвращает uptime устройства для определения стандартными средствами модуля Inet его перезагрузки. Можно отключить, тогда будет возвращать null (см конфигурацию). Отклчение может пригодиться, если устройство расформировано, чтобы обработчик не слал алармы.
- ifsync - синхронизация интерфейсов и их ifIndex на роутере и в биллинге:
- 1. Получаем по SNMP список соответствий: ifIndex->ifName интерфейсов на устройстве
- 2. Для каждого полученного интерфейса проверяем, есть ли в биллинге на устройсве интерфейс с таким именем?
- 2.1. Если нет, и он проходит через фильтр snmp.ifNameRegexpFilter - создаём с правильным ifIndex и категорией ip = snmp.ipCategory
- 2.2. Если есть, то совпадает ли ifIndex?
- 2.2.1. Если да, то ничего не делаем, всё ок.
- 2.2.2. Если нет, то меняем ifIndex
- 3. Оставшиеся необработанными интерфейсы в BG: если их нет на устройстве, то помечаем как отключенный и устанавливаем ifIndex=0
Настройка
Параметры конфигурации устройства/типа устройства:
- для SnmpDeviceManager
#версия протокола (1 или 2 (для 2с)) snmp.version=1 #ip-адрес или hostname устройства. По-умолчанию берётся из поля "Хост" устройства в модуле Inet snmp.host= #порт SNMP устройства snmp.port=161 #SNMP community. По-умолчанию - secret устройства в Inet snmp.community= #проверять ли uptime? Если 0, то метод uptime возвращает null snmp.checkUptime=1 #OID для опроса uptime устройства snmp.uptimeOid=1.3.6.1.2.1.1.3.0 #включает работу менеджера на этом устройстве snmp.enable=1
- для IfaceSnmpDeviceManager (в дополнение к настройкам из SnmpDeviceManager):
#oid для получения списка интерфейсов устройства snmp.ifNameOid=1.3.6.1.2.1.31.1.1.1.1 #regexp для фильтрации интерфейсов. Например, если нам в биллинге нужны только интерфейсы, #начинающиеся с Gi или Fa, то указываем snmp.ifNameRegexpFilter=.* snmp.ifNameRegexpFilter=^(Gi|Fa).* #id категории ресурсов, которая будет указана для создаваемых интерфейсов snmp.ipCategory=0 #если 1, то меняем индексы не с текущего момента, а со времени старта устройства, если это произошло сегодня. #Предполагаем, что ifIndex могут меняться только при рестарте устройства. snmp.substractUptime=1