虽然您可能在SNMP OID中找到所需的索引号(例如网络接口的索引号),但有时您不能完全依赖索引号始终保持不变。
索引号可能是动态的——它们可能随时间变化,这会导致您的监控项停止工作。
为避免这种情况,可以定义一个考虑索引号可能变化的OID。
例如,如果您需要检索与Cisco设备上的GigabitEthernet0/1接口对应的索引值以附加到ifInOctets,请使用以下OID:
ifInOctets["index","ifDescr","GigabitEthernet0/1"]
OID使用特殊语法:
<数据OID>["index","<索引基础OID>","<string 搜索目标>"]
参数 | 描述 |
---|---|
OID of data | 用于在监控项上检索数据的主OID |
index | 处理方法。当前支持一种方法: index - 搜索索引并将其附加到数据OID |
base OID of index | 将查找此OID以get与string对应的索引值 |
string to search for | 执行查找时用于精确匹配值的string。区分大小写 |
获取apache进程的memory使用情况
如果使用此OID语法:
索引号将在此处查找:
...
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后 以获取我们需要的值:
主机-RESOURCES-MIB::hrSWRunPerfMem.5388 = integer: 31468 KBytes
当请求动态索引监控项时,Zabbix会检索并缓存索引基础OID下的整个SNMP表,即使可能更早找到匹配项。这样做的目的是防止后续另一个监控项引用相同的基础OID时,Zabbix可以直接查询缓存中的索引,而无需再次轮询受监控的主机。请注意每个轮询器进程使用独立的缓存。
在所有后续的值获取操作中,仅验证已找到的索引。如果索引未变化,则请求该值。如果索引发生变化,则重建缓存——每个遇到索引变化的轮询器会再次遍历索引SNMP表。