1 动态索引
概述
虽然你可能会在 SNMP OID 中找到所需的索引号(例如网络接口的索引号),但有时你不能完全依赖该索引号始终保持不变。
索引号可能是动态的 - 它们可能会随着时间变化,因此你的监控项可能会因此停止工作。
为避免这种情况,可以定义一个考虑到索引号可能变化的 OID。
例如,如果你需要获取要附加到 ifInOctets 的索引值,并且该值对应于 Cisco 设备上的 GigabitEthernet0/1 接口,请使用以下 OID:
ifInOctets["index","ifDescr","GigabitEthernet0/1"]
语法
OID 使用一种特殊语法:
<数据的 OID>["index","<索引的基础 OID>","<要搜索的字符串>"]
| Parameter | Description |
|---|---|
| OID of data | 用于在监控项上检索数据的主 OID。 |
| index | 处理方法。目前仅支持一种方法: index - 搜索索引并将其追加到数据 OID |
| base OID of index | 将查询此 OID 以获取与该字符串对应的索引值。 |
| string to search for | 用于在查找时与某个值进行精确匹配的字符串。区分大小写。 |
示例
获取 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 会检索并缓存基于索引的整个 SNMP 表,位于基础 OID 下,即使更早就能找到匹配项也是如此。
这样做是为了在后续有其他监控项引用相同基础 OID 时使用 - Zabbix 会在缓存中查找索引,而不是再次查询被监控的主机。
请注意,每个轮询器进程都使用独立的缓存。
在后续所有值获取操作中,只会验证已找到的索引。
如果索引未发生变化,则请求值。
如果索引已发生变化,则会重建缓存 - 每个遇到索引变化的轮询器都会再次遍历该索引 SNMP 表。