Користувальницькькі налаштування

Налаштування сайту


Сайдбар

Розділи

Загальний опис
Історія змін
Рекомендації до оновлення
Плани на майбутнє
Відомі проблеми
Онлайн демо
Допомога проекту
Люди
Трохи про безпеку

FAQ



Редагувати сайдбар

switchpoller

Це стара версія документу!


Опитування свічів за допомогою SNMP

В Ubilling починаючи з релізу 0.4.1 з'явилася можливість опитування активного мережевого обладнання за допомогою SNMP (вимагає встановленого net-snmp). Механіка опитування шаблонізована і дає змогу опитувати обладнання за будь-якими OID-ами. Також модуль “Опитування свічів” використовує у своїй роботі кешування результатів, що дає змогу зробити відображення результатів прийнятним за часом.

Підтримуване з коробки обладнання

  • ZyXEL GS-4012F
  • ZyXEL GS-3012F
  • ZyXEL ES-2108
  • ZyXEL ES-2108G
  • Zyxel GS-2200-24
  • Cisco Catalyst 3500
  • Cisco Catalyst WS-C3548-XL-EN
  • Cisco-2940-8TT-S
  • Cisco Catalyst 3750G-24TS-S
  • Cisco Catalyst 3750-24TS-S
  • Cisco Catalyst 3560-24TS-S
  • Cisco SF300-24
  • Cisco Catalyst 2960-24TC-L
  • Cisco Catalyst C2960-48TC-L
  • Foxgate S6248-S4
  • Foxgate S6224-S4
  • Foxgate S6208-S1
  • Foxgate S6424-S2C2
  • Foxgate-S6224-S2
  • Foxgate-S-6008-S1L2
  • D-Link DES-3200-10
  • D-Link DES-3200-18
  • D-Link DES-3200-26
  • D-Link DES-3200-28
  • D-Link DES-3526
  • D-Link DES-1228/ME
  • D-Link DGS-1100-6/ME
  • D-Link DGS-3120-24sc
  • D-Link DES-3200-28F
  • D-Link DGS-1510-52
  • D-Link DGS-1210-20
  • D-Link DES-2108
  • D-Link DES-3010G
  • D-Link DES-3026
  • D-Link DES-3226S
  • D-Link DGS-3100-24TG
  • D-Link DGS-1500-20
  • D-Link DGS-3000-10TC
  • D-Link DGS-3024
  • D-Link DGS-3200-10
  • D-Link DES-3028
  • D-Link DES-1210-26
  • D-Link DES-1210-28
  • D-Link DGS-1210-10
  • D-Link DGS-1210-12TS
  • D-Link DGS-3000-28SC
  • D-Link DGS-3627G
  • HP ProCurve Switch 2626
  • HP ProCurve Switch 2650
  • HP ProCurve Switch 2524
  • HP ProCurve Switch 2824
  • Dell PowerConnect 5324
  • Dell EMC Networking N1148T-ON
  • Alcatel LS-5224
  • Huawei S2326TP
  • Extreme Networks Summit 200-24
  • ZIZITRA
  • TP-LINK TL-SG5412F
  • TP-LINK TL-SL5428E v2
  • Edge-Core ECS3510-28T
  • Huawei s232tp_c05
  • Eltex MES1124MB
  • Eltex MES2124MB
  • Eltex MES2124F
  • Eltex MES3108F
  • 3COM-3250
  • Mikrotik-CSS326-24G-2S

І багато-багато інших, про які ми вже задовбалися писати. Давайте ви самі подивитеся що буде працювати з коробки заглянувши в директорію config/snmptemplates?

Налаштування

У загальному випадку налаштування зводитися до додавання моделі свіча з правильним шаблоном SNMP

Після чого слід додати пристрій із потрібною моделькою і зазначеним SNMP ком'юніті, а також підрядком SWPOLL в описі, який сигналізує Ubilling про те, що для цього пристрою слід застосувати стандартні механізми опитування щодо обраного шаблону.

Якщо все додано правильно - у свіча в колонці дії має з'явитися іконка “Опитування за допомогою SNMP”

Набір параметрів, що запитуються з пристрою, повністю залежить від обраного шаблону і може бути практично довільним. Також можливе відображення FDB з пристрою.

Враховуючи, що опитування пристрою відбувається не надто швидко, для прискорення відображення результатів використовується механіка кешування. Для періодичного опитування всіх пристроїв, з метою заповнення кешу сирих даних слід використовувати виклик swpoll з API віддаленого виклику процедур.

Формат шаблону для опитування пристрою

Шаблони всіх пристроїв лежать у /config/snmptemplates/ і мають, наприклад, якийсь такий вигляд:

megaswitch9000
[define]
DEVICE="ZIZITRA MegaSwitch-9000 2ports"
FDB=true
FDB_MODE=default
 
[PORTSTATE]
NAME="Port states"
OIDS=".1.3.6.1.2.1.2.2.1.8.1,.1.3.6.1.2.1.2.2.1.8.2"
PARSER=sp_parse_zyportstates
 
[UPTIME]
NAME="Uptime"
OIDS=".1.3.6.1.2.1.1.3.0"
PARSER=sp_parse_raw

або такий для OLT:

BDCOM_GP3608
[define]
DEVICE="BDCOM OLT GP3600-8"
PON_ONU_PORT_MAX=128
 
[signal]
SIGNALMODE="GPBDCOM"
SIGINDEX=".1.3.6.1.4.1.3320.10.3.4.1.2"
MACINDEX=".1.3.6.1.4.1.3320.10.3.3.1.2"
SIGVALUE="INTEGER:"
MACVALUE="STRING:"
OFFSET="10"
OFFSETMODE="div"
DOWNVALUE="2147483648"
 
[misc]
ONUINDEX=".1.3.6.1.4.1.3320.10.3.3.1.2"
ONUVALUE="STRING:"
FDBINDEX=".1.3.6.1.2.1.17.7.1.2.2.1.1"
FDBVALUE="Hex-STRING:"
FDBDEVINDEX=".1.3.6.1.2.1.17.7.1.2.2.1.2"
FDBDEVVALUE="INTEGER:"
DISTINDEX=".1.3.6.1.4.1.3320.10.3.1.1.33"
DISTVALUE="INTEGER:"
INTERFACEINDEX=".1.3.6.1.2.1.2.2.1.2"
INTERFACEVALUE="STRING:"
RTTINDEX=".1.3.6.1.4.1.3320.101.11.1.1.8"
 
[system]
CPULOAD=".1.3.6.1.2.1.25.3.3.1.2"

Як бачимо файл складається із секцій.
Секція [define] є обов'язковою. У ній описуються такі характеристики пристрою як DEVICE (повне найменування моделі) і булевий параметр FDB, який означає, що для пристрою слід спробувати дістати FDB, а також необов'язковий параметр FDB_MODE, який вказує на метод опитування FDB таблиць. Він може приймати значення default (за замовчуванням) або dlp (для деяких моделей світчів Dlink) і tlp5428ev2 для відповідного tp-link. У разі, якщо параметр FDB_MODE не вказано, за замовчуванням вважатиметься, що він встановлений у значення default.
Також існують необов'язкові параметри:

  • FDB_ALLOW_ONLY_PORTS - вказує, що виключно ті MAC-адреси, які знаходяться за цими портами, будуть враховані під час парсингу FDB.
  • FDB_IGNORE_PORTS - вказує порти, MAC-адреси, що знаходяться за якими, будуть виключені під час парсингу FDB.

Слід зазначити, що параметр FDB_ALLOW_ONLY_PORTS має перевагу і, якщо номер порту буде зазначено одночасно в обох цих опціях, - перевага буде за FDB_ALLOW_ONLY_PORTS і МАСи з цього порту таки потраплять до FDB-кешу.

Далі кожна із секцій описує унікальний набір параметрів, за яким буде опитуватися пристрій. Ім'я секції особливого значення не має і просто має бути унікальним. Кожна секція складається з щонайменше трьох обов'язкових змінних. Це NAME - відображувана назва опитуваної характеристики (буде локалізовано), OIDS - список OID-ів через кому, які буде опитано для конкретної моделі, і PARSER - парсер даних, через який буде пропущено дані, отримані від кожного OID-а в поточній секції. З вищенаведеного прикладу можна зробити висновок, що цей шаблон відображатиме стан двох перших портів свіча і його аптайм, а також намагатиметься показувати таблицю відповідності MAC-ів за портами.
Починаючи з релізу Ubilling 0.8.5 також можна зберігати ваші шаблони в content/documents/mysnmptemplates/. Вони матимуть пріоритет перед базовими і будуть нормально переживати оновлення білінгу. Також, якщо вам потрібно змінити поведінку якогось наявного шаблону (наприклад, порти FDB, які ігноруються), потрудіться перед модифікацією, скопіювати його в content/documents/mysnmptemplates/ і редагувати його вже там.

На данный момент доступны следующие парсеры полученных из OID данных:

  • sp_parse_raw - данные показываются как есть без особой обработки
  • sp_parse_raw_sanitized - данные будут показаны как есть, просто с выкушенным типом.
  • sp_parse_zyportbytes - счетчики байт/пакетов на портах
  • sp_parse_zyportdesc - строковые описания портов
  • sp_parse_zyportstates - состояние портов
  • sp_parse_ciscocpu - нагрузка на CPU в %
  • sp_parse_ciscomemory - количество занятой памяти в Мб
  • sp_parse_eltex_acpower - напряжение AC питания свитчей Eltex
  • sp_parse_eltex_dcpower - напряжение DC питания свитчей Eltex
  • sp_parse_eltex_battery - уровень заряда АКБ свитчей Eltex
  • sp_parse_fxportstates - состояние портов для некоторых Foxgate 60xx
  • sp_parse_fxportbytes - счетчики байт/пакетов на портах для некоторых Foxgate 60xx
  • sp_parse_cable_tester - парсер кабельного тестера для свитчей Dlink
  • sp_parse_time_seconds - парсер времени из секунд в человеко-читабельный вид
  • sp_parse_power - парсер наличия электроэнергии (1/0).
  • sp_parse_eping_temp - парсер температуры с Equicom ping3 (да, она тупо делиться на 10)
  • sp_parse_eping_temp_gauge - нормальный такой градусник для Equicom ping3
  • sp_parse_division_temperature - универсальный градусник с делением значений на DIV и форматом шкалы в виде UNITS=“min|max|yellow|red”

Также доступны следующие режимы FDB:

  • default
  • dlp
  • tlp5428ev2
  • tlp2428
  • tlp2210
  • flp
  • ciscoebobo

Формат "кумулятивного" шаблона для опроса устройства

Полностью базируется на базовом формате шаблонов, но имеет свои особенности, о которых будет рассказано ниже. Собственно вся “кумулятивность” заключается в том, что нам не нужно указывать конкретный порт для каждой секции в конце OID'а - мы указываем только OID необходимой нам таблицы, будь то dot1dFdb, dot1qFdb, банальный ifDescr или чуть менее банальный ifAlias. А дальше наш модуль уже самостоятельно переберет все имеющиеся порты и по их индексам постарается достать все, что сможет(ну, из того, что мы укажем в шаблоне, конечно).

Итак, новые параметры секции [define]:

  • POLLMODE должен быть всегда cumulative, если мы хотим именно “кумулятивно обрабатывать шаблон”
  • FDB_MODE должен быть всегда sw_cumulative, если мы хотим попытаться достать описания интерфейсов и номера VLAN
  • SFPSTARTPORT, SFPENDPORT - полезны для устройств, имеющих на борту как медные, так и SFP-порты, для которых вы собираетесь в шаблоне использовать секции [SFP….], такие как [SFPTXPOWER], [SFPRXPOWER], [SFPWAVELENGTH] и прочие. Нужны они главным образом для того, чтобы избежать визуализации пустых значений для медных портов.
  • POESTARTPORT, POEENDPORT - используются ровным счетом для тех же целей, что и предыдущие два параметра, только на этот раз с их помощью мы определяем PoE порты устройства. То бишь порты, с которых опрашиваемый девайс может питать другие девайсы. Для корректного опроса таких портов нам понадобятся секции [POE….]
    • Примеры секций [SFP….] и [POE….] вы найдете ниже, в шаблоне для примера

Далее немного об “особенных” секциях:

PORTIFACE - в этой секции указываются OID'ы для получения индексов портов, дескрипшинов и алиасов портов. На закономерный вопрос: “А зачем и дескрипшины, и алиасы?” - даем не менее закономерный ответ: “А зачем они вообще существуют по отдельности?”. Но, если серьезно - логика здесь весьма проста: некоторые девайсы хранят наименования интерфейсов в ifDescr, а некоторые - в ifAlias. Потому наш модуль сначала пытается найти описание порта в ifDescr, а если не находит - тогда уже в ifAlias. И нам абсолютно не нужно над этим заморачиваться. Удобно, не правда ли?

[PORTIFACE]
PORTINDEX=".1.3.6.1.2.1.2.2.1.1"
PORTDESCR=".1.3.6.1.2.1.2.2.1.2"
PORTALIAS=".1.3.6.1.2.1.31.1.1.1.18"

PORTDESC - как и следует из комментария к этой секции, в кумулятивных шаблонах - это просто заглушка. Когда кумулятивный обработчик “встречает” в шаблоне эту секцию - он просто запускает специальный парсер для обработки описаний/наименований портов устройства.

[PORTDESC]
; just a placeholder
NAME="Desc"

PORT.1D_FDB, PORT.1Q_FDB - еще две секции, характерные только для кумулятивного режима обработки и не предполагающие использования какого-либо парсера. Предназначены для получения FDB-таблицы девайса. Таблица PORT.1Q_FDB, как более подробная и детальная, используется для получения номеров VLAN для МАС адресов с опрашиваемых портов.

[PORT.1D_FDB]
PORTTABLE=".1.3.6.1.2.1.17.4.3.1.2"
PORTSTATUS=".1.3.6.1.2.1.17.4.3.1.3"
 
[PORT.1Q_FDB]
PORTTABLE=".1.3.6.1.2.1.17.7.1.2.2.1.2"
PORTSTATUS=".1.3.6.1.2.1.17.7.1.2.2.1.3"

А ещё мы теперь можем указывать в секциях единицы измерения и величину, на которую нужно поделить возвращённое OID'ом значение, используя параметры DIV и UNITS. Эти параметры могут жить абсолютно раздельно, то есть: для любой секции мы можем указать только один из них. Например, если OID нам возвращает сразу корректное значение, которое не нужно ни на что делить и нам нужно только прицепить к нему единицы измерения, то для секции достаточно указать только один лишь параметр UNITS. Так же стоит отметить, что для корректной обработки этого всего нужно использовать новые парсеры. Выглядит это как-то так:

[SFPTXPOWER]
NAME="SFP TX power"
OIDS=".1.3.6.1.4.1.14988.1.1.19.1.1.9"
DIV=1000
UNITS="dBm"
PARSER=sp_parse_division_units
 
[CPU TEMP]
NAME="CPU temperature"
SECTPOLLMODE="noncumulative"
OIDS=".1.3.6.1.4.1.14988.1.1.3.11.0"
DIV=10
UNITS="C"
PARSER=sp_parse_division_units_noport

Новые парсеры:

  • sp_parse_raw_trim_tab - то же, что и sp_parse_raw, только возвращает одно лишь значение OID'а, обкусывая всё лишнее и в ячейке таблицы.
  • sp_parse_division_units - обрабатывает параметры DIV и UNITS, если таковые есть в секции и производит соответствующие операции деления и “приклеивания” единиц измерения к распарсенному значению. Делает этого для каждого найденного порта, согласно индексу портов и возвращает значение в виде:
    номер порта ⇒ значение_OID + единицы измерения
  • sp_parse_division_units_noport - то же, что и sp_parse_division_units, но ничего не знает о портах и их индексах, обрабатывает одиночное значение. Полезен для вывода информации о таких штуках, как заргузка/температура CPU, температура девайса, скорость оборотов вентилятора и прочей информации о “здоровье” девайса.
  • sp_parse_mikrotik_poe - как несложно догадаться из названия - предназначен для шаблонов устройств Mikrotik с поддержкой питания других устройств по PoE.
  • sp_parse_sw_port_idx - собственно - сердце кумулятивного опроса, задача которого - “построить” индекс портов девайса. Мало полезен для отдельностоящего обособленного использования.
  • sp_parse_sw_port_descr - как и предыдущий парсер - предназначен больше для “служебных” целей. Строит массив описаний/наименований портов, “добывая” их из ifDescr или ifAlias.

Так как же в итоге будет выглядеть кумулятивный шаблон для устройства? Покажем на примере довольно известного девайса Mikrotik RB260GSP / CSS106-1G-4P-1S:

[define]
DEVICE=Mikrotik-CSS106_RB260GSP_SW_SFP
POLLMODE=cumulative
SFPSTARTPORT=5
SFPENDPORT=5
POESTARTPORT=2
POEENDPORT=5
FDB=true
FDB_MODE=sw_cumulative
FDB_ALLOW_ONLY_PORTS=
FDB_IGNORE_PORTS=
 
[PORTIFACE]
PORTINDEX=".1.3.6.1.2.1.2.2.1.1"
PORTDESCR=".1.3.6.1.2.1.2.2.1.2"
PORTALIAS=".1.3.6.1.2.1.31.1.1.1.18"
 
[PORT.1D_FDB]
PORTTABLE=".1.3.6.1.2.1.17.4.3.1.2"
PORTSTATUS=".1.3.6.1.2.1.17.4.3.1.3"
 
[PORT.1Q_FDB]
PORTTABLE=".1.3.6.1.2.1.17.7.1.2.2.1.2"
PORTSTATUS=".1.3.6.1.2.1.17.7.1.2.2.1.3"
 
[PORTSTATE]
NAME="Port states"
OIDS=".1.3.6.1.2.1.2.2.1.8"
PARSER=sp_parse_zyportstates
 
[PORTDESC]
; just a placeholder
NAME="Desc"
 
[PORTTX]
NAME="Bytes transmitted"
OIDS=".1.3.6.1.2.1.2.2.1.16"
PARSER=sp_parse_zyportbytes
 
[PORTRX]
NAME="Bytes received"
OIDS=".1.3.6.1.2.1.2.2.1.10"
PARSER=sp_parse_zyportbytes
 
[PORTERRTX]
NAME="TX errors"
OIDS=".1.3.6.1.2.1.2.2.1.20"
PARSER=sp_parse_zyportbytes
 
[PORTERRRX]
NAME="RX errors"
OIDS=".1.3.6.1.2.1.2.2.1.14"
PARSER=sp_parse_zyportbytes
 
[PORTMULTTX]
NAME="Multicast TX"
OIDS=".1.3.6.1.2.1.31.1.1.1.12"
PARSER=sp_parse_zyportbytes
 
[PORTMULTRX]
NAME="Multicast RX"
OIDS=".1.3.6.1.2.1.31.1.1.1.8"
PARSER=sp_parse_zyportbytes
 
[PORTBRODTX]
NAME="Broadcast TX"
OIDS=".1.3.6.1.2.1.31.1.1.1.13"
PARSER=sp_parse_zyportbytes
 
[PORTBRODRX]
NAME="Broadcast RX"
OIDS=".1.3.6.1.2.1.31.1.1.1.9"
PARSER=sp_parse_zyportbytes
 
[SFPWAVELENGTH]
NAME="SFP wave length"
OIDS=".1.3.6.1.4.1.14988.1.1.19.1.1.5"
DIV=100
UNITS="nm"
PARSER=sp_parse_division_units
 
[SFPTEMP]
NAME="SFP temperature"
OIDS=".1.3.6.1.4.1.14988.1.1.19.1.1.6"
UNITS="C"
PARSER=sp_parse_division_units
 
[SFPVOLTAGE]
NAME="SFP voltage"
OIDS=".1.3.6.1.4.1.14988.1.1.19.1.1.7"
DIV=1000
UNITS="V"
PARSER=sp_parse_division_units
 
[SFPCURRENT]
NAME="SFP current"
OIDS=".1.3.6.1.4.1.14988.1.1.19.1.1.8"
UNITS="mA"
PARSER=sp_parse_division_units
 
[POESTATUS]
NAME="POE status"
OIDS=".1.3.6.1.4.1.14988.1.1.15.1.1.3"
PARSER=sp_parse_mikrotik_poe
 
[POECURRENT]
NAME="POE current"
OIDS=".1.3.6.1.4.1.14988.1.1.15.1.1.5"
UNITS="mA"
PARSER=sp_parse_division_units
 
[POEPOWER]
NAME="POE power"
OIDS=".1.3.6.1.4.1.14988.1.1.15.1.1.6"
DIV=10
UNITS="W"
PARSER=sp_parse_division_units
 
[UPTIME]
NAME="Uptime"
SECTPOLLMODE="noncumulative"
OIDS=".1.3.6.1.2.1.1.3.0"
PARSER=sp_parse_raw_trim_tab
 
[SYSTEM VOLTAGE]
NAME="System voltage"
SECTPOLLMODE="noncumulative"
OIDS=".1.3.6.1.4.1.14988.1.1.3.8.0"
DIV=10
UNITS="V"
PARSER=sp_parse_division_units_noport
 
[SYSTEM TEMP]
NAME="System temperature"
SECTPOLLMODE="noncumulative"
OIDS=".1.3.6.1.4.1.14988.1.1.3.10.0"
DIV=10
UNITS="C"
PARSER=sp_parse_division_units_noport
 
[SYSTEM VERSION]
NAME="System version"
SECTPOLLMODE="noncumulative"
OIDS=".1.3.6.1.2.1.1.1.0"
PARSER=sp_parse_raw_trim_tab

А если требуется делать еще и snmpset?

Начиная с релиза 0.8.4 появилась возможность в процессе опроса, делать устройствам snmp set. Для этого в каждой секции за исключением “define” добавлена возможность указать опцию SETOIDS в формате:

SETOIDS="oid|type|value,oid|type|value"

Где oid является собственно oid-ом, value является значением которое будет установлено, а type указывает на тип и может принимать следующие значения:

  • i INTEGER
  • u INTEGER UNSIGNED
  • s STRING
  • x HEX STRING
  • d DECIMAL STRING
  • n NULLOBJ
  • o OBJID
  • t TIMETICKS
  • a IPADDRESS
  • b BITS

Следует также заметить, что секция с SETOIDS может быть самодостаточной и не требует указания других опций, таких как NAME, OIDS или скажем PARSER. В таком случае, она просто проведет по очереди все write операции и завершит свою работу. Вот пример указания port description для двух портов:

[portnames]
SETOIDS=".1.3.6.1.2.1.31.1.1.1.18.4|s|testport1,.1.3.6.1.2.1.31.1.1.1.18.5|s|testport2"

Хотя да, никто не запрещает быть ей при этом обычной интерактивной секцией и показывать в процессе своей работы какие-то результаты. Например как-то так:

[portnames]
SETOIDS=".1.3.6.1.2.1.31.1.1.1.18.4|s|testport1,.1.3.6.1.2.1.31.1.1.1.18.5|s|testport2"
NAME="Ports"
OIDS=".1.3.6.1.2.1.31.1.1.1.18.4,.1.3.6.1.2.1.31.1.1.1.18.5"
PARSER=sp_parse_raw

В таком случае, следует всегда помнить о том, что сначала всегда выполняются все snmp set операции, а потом уже производиться опрос и рендер указанных в опции OIDS данных.

[define]
PON_ONU_PORT_MAX=128

Если вы используете две технологии ПОН у себя в сети и вам нужно перекрыть глобальный обязательный параметр alter.ini PON_ONU_PORT_MAX - то добавьте этот параметр в SNMP шаблоны для OLT и у вас будет нормально отображаться статистика и другие параметры.

Генератор шаблонов

Также камрадом DemonidZe был запилен генератор шаблонов опроса оборудования, для тех кому лень самому разбираться.

switchpoller.1686930480.txt.gz · Востаннє змінено: 2023/06/16 18:48 повз skybetik