В этом разделе мы выполним обнаружение SNMP на коммутаторе.
В отличие от обнаружения файловых систем и сетевых интерфейсов - этот элемент данных не требует наличия ключа "snmp.discovery", достаточно указать, что типом элемента данных является SNMP агент.
Обнаружение SNMP OID'ов поддерживается начиная с Zabbix сервера/прокси 2.0.
Для настройки правила обнаружения, выполните следующее:
OID'ы для обнаружения добавляются в поле SNMP OID в следующем формате: discovery[{#МАКРОС1}, oid1, {#МАКРОС2}, oid2, …,]
где {#МАКРОС1}, {#МАКРОС2} … допустимые имена низкоуровневых макросов и oid1, oid2... являются OID'ами способными сгенерировать осмысленные значения для этих макросов. Встроенный макрос {#SNMPINDEX} содержит индекс обнаруженного OID, который применяется к обнаруженным объектам. Обнаруженные объекты группируются по значению макроса {#SNMPINDEX}.
Для понимания того, что мы имеем в виду, давайте выполним несколько раз snmpwalk на нашем коммутаторе:
$ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifDescr
IF-MIB::ifDescr.1 = STRING: WAN
IF-MIB::ifDescr.2 = STRING: LAN1
IF-MIB::ifDescr.3 = STRING: LAN2
$ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifPhysAddress
IF-MIB::ifPhysAddress.1 = STRING: 8:0:27:90:7a:75
IF-MIB::ifPhysAddress.2 = STRING: 8:0:27:90:7a:76
IF-MIB::ifPhysAddress.3 = STRING: 8:0:27:2b:af:9e
И зададим SNMP OID равным: discovery[{#IFDESCR}, ifDescr, {#IFPHYSADDRESS}, ifPhysAddress]
Теперь это правило будет обнаруживать объекты с макросом {#IFDESCR} равным WAN, LAN1 и LAN2, макросом {#IFPHYSADDRESS} равным 8:0:27:90:7a:75, 8:0:27:90:7a:76, и 8:0:27:2b:af:9e, макросом {#SNMPINDEX} равным индексам обнаруженных OID 1, 2 и 3:
{
"data": [
{
"{#SNMPINDEX}": "1",
"{#IFDESCR}": "WAN",
"{#IFPHYSADDRESS}": "8:0:27:90:7a:75"
},
{
"{#SNMPINDEX}": "2",
"{#IFDESCR}": "LAN1",
"{#IFPHYSADDRESS}": "8:0:27:90:7a:76"
},
{
"{#SNMPINDEX}": "3",
"{#IFDESCR}": "LAN2",
"{#IFPHYSADDRESS}": "8:0:27:2b:af:9e"
}
]
}
Если обнаруженный объект не имеет указанный OID, тогда по этому объекту соответстующий макрос пропускается. Например, если у нас есть следующие данные:
ifDescr.1 "Interface #1"
ifDescr.2 "Interface #2"
ifDescr.4 "Interface #4"
ifAlias.1 "eth0"
ifAlias.2 "eth1"
ifAlias.3 "eth2"
ifAlias.5 "eth4"
Тогда, в случае SNMP обнаружения discovery[{#IFDESCR}, ifDescr, {#IFALIAS}, ifAlias]
вернется следующая структура:
{
"data": [
{
"{#SNMPINDEX}": 1,
"{#IFDESCR}": "Interface #1",
"{#IFALIAS}": "eth0"
},
{
"{#SNMPINDEX}": 2,
"{#IFDESCR}": "Interface #2",
"{#IFALIAS}": "eth1"
},
{
"{#SNMPINDEX}": 3,
"{#IFALIAS}": "eth2"
},
{
"{#SNMPINDEX}": 4,
"{#IFDESCR}": "Interface #4"
},
{
"{#SNMPINDEX}": 5,
"{#IFALIAS}": "eth4"
}
]
}
Следующий скриншот иллюстрирует каким образом мы можем использовать эти макросы в прототипах элементов данных:
Опять же, вы можете создать столько прототипов элементов данных, сколько необходимо:
Следующий скриншот иллюстрирует каким образом мы можем использовать эти макросы в прототипах триггеров:
Следующий скриншот иллюстрирует каким образом мы можем использовать эти макросы в прототипах графиков:
Результат нашего правила обнаружения:
Когда сервер выполнит правило обнаружения, будут созданы реальные элементы данных, триггеры и графики на основе значений, которые вернет правило обнаружения SNMP. В настройках узла сети эти объекты будут иметь префикс с оранжевой ссылкой на правило обнаружения, с которого пришли эти объекты.