1 动态索引
概述
虽然您可能会在 SNMP OID 中找到所需的索引号(例如网络接口的索引号),但有时不能完全依赖该索引号始终保持不变。
索引号可能是动态的——它们可能会随时间变化,因此您的监控项 可能会因此停止工作。
为避免这种情况,可以定义一个 OID,以考虑索引号发生变化的可能性。
例如,如果您需要获取要附加到 ifInOctets 的索引值,并且该值对应于 Cisco 设备上的 GigabitEthernet0/1 接口,请使用以下 OID:
ifInOctets["index","ifDescr","GigabitEthernet0/1"]
语法
OID 使用一种特殊语法:
<数据的 OID>["index","<索引的基础 OID>","<要搜索的字符串>"]
| 参数 | 说明 |
|---|---|
| 数据的 OID | 用于在监控项中检索数据的主 OID。 |
| index | 处理方法。目前仅支持一种方法: index - 搜索索引并将其附加到数据 OID |
| 索引的基础 OID | 将查找此 OID,以获取与该字符串对应的索引值。 |
| 要搜索的字符串 | 查找时用于与某个值进行精确匹配的字符串。区分大小写。 |
示例
获取 apache 进程的内存使用情况。
如果使用此 OID 语法:
HOST-RESOURCES-MIB::hrSWRunPerfMem["index","HOST-RESOURCES-MIB::hrSWRunPath", "/usr/sbin/apache2"]
则会在这里查找索引号:
...
HOST-RESOURCES-MIB::hrSWRunPath.5376 = STRING: "/sbin/getty"
HOST-RESOURCES-MIB::hrSWRunPath.5377 = STRING: "/sbin/getty"
HOST-RESOURCES-MIB::hrSWRunPath.5388 = STRING: "/usr/sbin/apache2"
HOST-RESOURCES-MIB::hrSWRunPath.5389 = STRING: "/sbin/sshd"
...
现在我们得到了索引 5388。
该索引将附加到数据 OID 后,以便获取我们感兴趣的值:
HOST-RESOURCES-MIB::hrSWRunPerfMem.5388 = INTEGER: 31468 KBytes
索引查找缓存
当请求动态索引监控项时,Zabbix 会在索引的基础 OID 下检索并缓存整个 SNMP 表,即使更早就能找到匹配项也是如此。
这样做是为了防止之后其他监控项引用相同的基础 OID——Zabbix 将在缓存中查找索引,而不是再次查询被监控主机。
请注意,每个 poller 进程都使用独立的缓存。
在之后所有的值获取操作中,只会验证已找到的索引。
如果索引未发生变化,则请求该值。
如果索引已发生变化,则会重建缓存——每个遇到索引变化的 poller 都会再次遍历索引 SNMP 表。