问题引入

有一台 Ruijie 的 S2910 交换机在做我 HomeLab 的 TOR。因为 Ruijie 私有 MIB 的原因,Zabbix 这边一直缺一个完整的模板,五一期间抽空完善了一下模板,采集的信息趋于完善。接口自动发现,触发器自动配置,风扇,接口,温度啥的信息终于都全了。

但 Zabbix 在采集数据时,有些监控值会周期性不可用,提示“Value has unknown type 0x05”。日志如下,/var/log/zabbix_server.log

1
2
3
4
5
6
7
2137444:20220504:232103.943 item "HomeLab-TOR-S2910:net.if.in[ifHCInOctets.15]" became not supported: Value has unknown type 0x05
2137444:20220504:232103.943 item "HomeLab-TOR-S2910:net.if.out.discards[ifOutDiscards.9]" became not supported: Value has unknown type 0x05
2137444:20220504:232103.944 item "HomeLab-TOR-S2910:net.if.in.errors[ifInErrors.15]" became not supported: Value has unknown type 0x05
2137444:20220504:232104.067 item "HomeLab-TOR-S2910:net.if.in[ifHCInOctets.9]" became not supported: Value has unknown type 0x05
2137444:20220504:232104.068 item "HomeLab-TOR-S2910:net.if.out[ifHCOutOctets.21]" became not supported: Value has unknown type 0x05
2137444:20220504:232104.068 item "HomeLab-TOR-S2910:net.if.out.errors[ifOutErrors.3]" became supported
2137444:20220504:232104.068 item "HomeLab-TOR-S2910:net.if.in[ifHCInOctets.13]" became supported

是 OID 不对吗,也不是,snmpget unsupported 的 OID,均能返回正常的值,而且并不是每个采集周期 Zabbix 都无法 Get 到值。

20220505220237

问题处理

最后发现是“bulk request”造成的,中文版本翻译为“批量请求”or“大量请求”。在设备采集配置中,关闭“bulk request”即可。

20220505215827

为什么会这样

需要了解一下什么是 BR(Bulk Request)。

Zabbix Server 会定期向主机请求值,Zabbix 可以一次请求一个或多个值。Zabbix 会默认尝试一次获取多个值,也就是我们所说的批量请求。
但是这个批量是一个增量的过程,正常情况下 Zabbix 会试探性的获取值,直到可以一次性查询所有 SNMP 项目或因为设备无 SNMP 响应而终止。

关联代码:https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/src/zabbix_server/poller/checks_snmp.c

大量请求 就是 SNMPv2 的 GetBulkRequest 在 Zabbix 中的实现。

因为 SNMPv2 响应不是原子性的,被采集机器无法处理 BulkRequest 请求时,部分响应失败,最终会只响应部分结果。