尽管你可以在 SNMP OID 中找到所需的索引号(例如,网络接口的索引号),但有时你不能完全依赖该索引号始终保持不变。
索引号可能是动态的——它们可能会随时间而改变,从而导致你的 监控项 不再正常工作。
为了避免这种情况,可以定义一个 OID,该 OID 考虑到了索引号可能发生改变的情况。
例如,如果你需要获取要附加到 ifInOctets 的索引值,该值对应 Cisco 设备上的 GigabitEthernet0/1 接口,请使用以下 OID:
用于OID的特殊语法如下:
<数据的OID>["索引","<索引的基本OID>","<string 要搜索的内容>"]
参数 | 描述 |
---|---|
OID of data | 用于在 监控项 上检索数据的主要OID。 |
index | 处理方法。目前仅支持一种方法: index – 搜索索引并将其附加到数据OID |
base OID of index | 将查找此OID以 get 与 string 对应的索引值。 |
string to search for | 在查找时,用于与值进行精确匹配的 string。区分大小写。 |
获取 apache 进程的 memory 使用情况。
如果使用以下 OID 语法:
索引号将在此处查找:
...
主机-RESOURCES-MIB::hrSWRunPath.5376 = string: "/sbin/getty"
主机-RESOURCES-MIB::hrSWRunPath.5377 = string: "/sbin/getty"
主机-RESOURCES-MIB::hrSWRunPath.5388 = string: "/usr/sbin/apache2"
主机-RESOURCES-MIB::hrSWRunPath.5389 = string: "/sbin/sshd"
...
现在我们得到了索引号 5388。该索引号将被追加到数据 OID 的末尾,以便获取我们感兴趣的具体数值:
当请求一个动态索引 监控项 时,Zabbix 会检索并缓存索引基本 OID 下的整个 SNMP 表,即使可以更快找到匹配项。这样做的目的是以防后续的另一个 监控项 引用相同的基 OID — Zabbix 将在缓存中查找索引,而不是再次查询被监控的 主机。请注意,每个轮询器进程使用独立的缓存。
在所有后续的值检索操作中,仅验证已找到的索引。如果索引未更改,则请求值。如果索引已更改,则重建缓存 — 每个遇到索引更改的轮询器将再次遍历索引的 SNMP 表。