在这个部分,我们将会在交换机上展示discoverySNMP。
和文件系统和网络接口发现不同,此监控项无需有“snmp.discovery” 密钥 - 监控项类型的SNMP agent就足够了。
从Zabbix server/proxy 2.0开始支持发现SNMP OIDs。
根据以下操作来设置发现规则:
所有必填输入字段都标有红色星号。
要发现的OID在SNMP OID字段中以以下格式定义: discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,]
其中 {#MACRO1}, {#MACRO2} … 是有效的LLD宏名称, oid1, oid2… 是能够为这些宏生成有意义值的OID。 包含已发现OID索引的内置宏 {#SNMPINDEX}将应用于已发现的实体。发现的实体按{#SNMPINDEX}宏的值分组。
为了理解我们的意思,让我们在我们的交换机上展示一些snmpwalks:
$ 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 and LAN2, {#IFPHYSADDRESS} 宏设置为 8:0:27:90:7a:75, 8:0:27:90:7a:76, 和 8:0:27:2b:af:9e, {#SNMPINDEX} 宏设置为发现的OID索引 1, 2 and 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"
}
]
}
In this section we will perform an SNMP discovery on a switch.
Unlike with file system and network interface discovery, the item does not necessarily has to have an “snmp.discovery” key - item type of SNMP agent is sufficient.
Discovery of SNMP OIDs is supported since Zabbix server/proxy 2.0.
To configure the discovery rule, do the following:
All mandatory input fields are marked with a red asterisk.
The OIDs to discover are defined in SNMP OID field in the following format: discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,]
where {#MACRO1}, {#MACRO2} … are valid lld macro names and oid1, oid2… are OIDs capable of generating meaningful values for these macros. A built-in macro {#SNMPINDEX} containing index of the discovered OID is applied to discovered entities. The discovered entities are grouped by {#SNMPINDEX} macro value.
To understand what we mean, let us perform few snmpwalks on our switch:
$ 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
And set SNMP OID to: discovery[{#IFDESCR}, ifDescr, {#IFPHYSADDRESS}, ifPhysAddress]
Now this rule will discover entities with {#IFDESCR} macros set to WAN, LAN1 and LAN2, {#IFPHYSADDRESS} macros set to 8:0:27:90:7a:75, 8:0:27:90:7a:76, and 8:0:27:2b:af:9e, {#SNMPINDEX} macros set to the discovered OIDs indexes 1, 2 and 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"
}
]
}
If an entity does not have the specified OID, then the corresponding macro will be omitted for this entity. For example if we have the following data:
ifDescr.1 "Interface #1" ifDescr.2 "Interface #2" ifDescr.4 "Interface #4" ifAlias.1 "eth0" ifAlias.2 "eth1" ifAlias.3 "eth2" ifAlias.5 "eth4"
Then in this case SNMP discovery discovery[{#IFDESCR}, ifDescr, {#IFALIAS}, ifAlias] will return the following structure:
{
"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"
}
]
}
The following screenshot illustrates how we can use these macros in item prototypes:
Again, creating as many item prototypes as needed:
The following screenshot illustrates how we can use these macros in graph prototypes:
A summary of our discovery rule: