1 动态索引

概述

尽管你可以在 SNMP OID 中找到所需的索引号(例如,网络接口的索引号),但有时你不能完全依赖该索引号始终保持不变。

索引号可能是动态的——它们可能会随时间而改变,从而导致你的 监控项 不再正常工作。

为了避免这种情况,可以定义一个 OID,该 OID 考虑到了索引号可能发生改变的情况。

例如,如果你需要获取要附加到 ifInOctets 的索引值,该值对应 Cisco 设备上的 GigabitEthernet0/1 接口,请使用以下 OID:

ifInOctets["index","ifDescr","GigabitEthernet0/1"]
语法

用于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::hrSWRunPerfMem["index","主机-RESOURCES-MIB::hrSWRunPath", "/usr/sbin/apache2"]

索引号将在此处查找:

...
       主机-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 的末尾,以便获取我们感兴趣的具体数值:

主机-RESOURCES-MIB::hrSWRunPerfMem.5388 = integer: 31468 KBytes

索引查询缓存

当请求一个动态索引 监控项 时,Zabbix 会检索并缓存索引基本 OID 下的整个 SNMP 表,即使可以更快找到匹配项。这样做的目的是以防后续的另一个 监控项 引用相同的基 OID — Zabbix 将在缓存中查找索引,而不是再次查询被监控的 主机。请注意,每个轮询器进程使用独立的缓存。

在所有后续的值检索操作中,仅验证已找到的索引。如果索引未更改,则请求值。如果索引已更改,则重建缓存 — 每个遇到索引更改的轮询器将再次遍历索引的 SNMP 表。