4 SNMP OID的自动发现

概述

本章中会演示如何对交换机执行一次SNMP的 自动发现

监控项的键

跟文件系统和网络接口自动发现不同,SNMP自动发现的监控项无需配置 “snmp.discovery” 键 - 只要监控项类型设置为SNMP agent就足够了。

从Zabbix server/proxy 2.0起支持SNMP OID自动发现。

要配置自动发现规则,需要完成下面的步骤:

  • 找到: 配置模板
  • 在对应模板所在的那一行点击 自动发现

4 SNMP OID的自动发现 - 图1

  • 点击屏幕右上角的 创建自动发现规则
  • 填写下面截图中的自动发现规则表格

4 SNMP OID的自动发现 - 图2

所有强制输入框标记为红色星号。

待发现的OID在SNMP OID输入框中定义,格式如下: discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,]

其中 {#MACRO1}, {#MACRO2} … 是有效的LLD宏名称,然后 oid1, oid2… 是可以为这些宏生成具体值的OID。内置的宏 {#SNMPINDEX} 包含已发现OID的索引,这个宏可用于已发现的实体上。已发现的实体通过 {#SNMPINDEX} 宏的返回值来进行分组。

要理解上面说的,我们来演示一下对交换机执行snmpwalk操作:

  1. $ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifDescr
  2. IF-MIB::ifDescr.1 = STRING: WAN
  3. IF-MIB::ifDescr.2 = STRING: LAN1
  4. IF-MIB::ifDescr.3 = STRING: LAN2
  5. $ snmpwalk -v 2c -c public 192.168.1.1 IF-MIB::ifPhysAddress
  6. IF-MIB::ifPhysAddress.1 = STRING: 8:0:27:90:7a:75
  7. IF-MIB::ifPhysAddress.2 = STRING: 8:0:27:90:7a:76
  8. IF-MIB::ifPhysAddress.3 = STRING: 8:0:27:2b:af:9e

然后设置 SNMP OID 为: discovery[{#IFDESCR}, ifDescr, {#IFPHYSADDRESS}, ifPhysAddress]

现在规则会自动去发现对应实体,实体中的 {#IFDESCR} 宏需要设置为 WAN, LAN1LAN2, {#IFPHYSADDRESS} 宏需要设置为 8:0:27:90:7a:75, 8:0:27:90:7a:76, 和 8:0:27:2b:af:9e, {#SNMPINDEX} 宏需要设置为已发现的OID的索引值 1, 23:

  1. [
  2. {
  3. "{#SNMPINDEX}": "1",
  4. "{#IFDESCR}": "WAN",
  5. "{#IFPHYSADDRESS}": "8:0:27:90:7a:75"
  6. },
  7. {
  8. "{#SNMPINDEX}": "2",
  9. "{#IFDESCR}": "LAN1",
  10. "{#IFPHYSADDRESS}": "8:0:27:90:7a:76"
  11. },
  12. {
  13. "{#SNMPINDEX}": "3",
  14. "{#IFDESCR}": "LAN2",
  15. "{#IFPHYSADDRESS}": "8:0:27:2b:af:9e"
  16. }
  17. ]

如果实体没有指定的OID,则对应的宏会被跳过。比如,假如存在下面的数据:

  1. ifDescr.1 "Interface #1"
  2. ifDescr.2 "Interface #2"
  3. ifDescr.4 "Interface #4"
  4. ifAlias.1 "eth0"
  5. ifAlias.2 "eth1"
  6. ifAlias.3 "eth2"
  7. ifAlias.5 "eth4"

在此场景中,SNMP 自动发现 discovery[{#IFDESCR}, ifDescr, {#IFALIAS}, ifAlias] 会返回这种结构的数据:

  1. [
  2. {
  3. "{#SNMPINDEX}": 1,
  4. "{#IFDESCR}": "Interface #1",
  5. "{#IFALIAS}": "eth0"
  6. },
  7. {
  8. "{#SNMPINDEX}": 2,
  9. "{#IFDESCR}": "Interface #2",
  10. "{#IFALIAS}": "eth1"
  11. },
  12. {
  13. "{#SNMPINDEX}": 3,
  14. "{#IFALIAS}": "eth2"
  15. },
  16. {
  17. "{#SNMPINDEX}": 4,
  18. "{#IFDESCR}": "Interface #4"
  19. },
  20. {
  21. "{#SNMPINDEX}": 5,
  22. "{#IFALIAS}": "eth4"
  23. }
  24. ]

监控项原型

下面的截图演示了如何在监控项原型中使用宏:

4 SNMP OID的自动发现 - 图3

创建所需的监控项原型,数量不限:

4 SNMP OID的自动发现 - 图4

触发器原型

下面截图演示了如何在触发器原型中使用宏:

4 SNMP OID的自动发现 - 图5

4 SNMP OID的自动发现 - 图6

图形原型

下面的截图演示了如何在图形原型中使用宏:

4 SNMP OID的自动发现 - 图7

4 SNMP OID的自动发现 - 图8

刚才创建的自动发现规则整体展示:

4 SNMP OID的自动发现 - 图9

发现的实体

Zabbix server会基于SNMP自动发现规则的返回值来创建实际的监控项、触发器和图表。在主机配置中,这些实体会以一个橙色链接作为前缀来标识,链接指向生成该实体的自动发现规则。

4 SNMP OID的自动发现 - 图10

4 SNMP OID的自动发现 - 图11

4 SNMP OID的自动发现 - 图12