问题引入

有一台 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 请求时,部分响应失败,最终会只响应部分结果。