“批量请求”导致 Zabbix“Value has unknown type 0x05”
问题引入
有一台 Ruijie 的 S2910 交换机在做我 HomeLab 的 TOR。因为 Ruijie 私有 MIB 的原因,Zabbix 这边一直缺一个完整的模板,五一期间抽空完善了一下模板,采集的信息趋于完善。接口自动发现,触发器自动配置,风扇,接口,温度啥的信息终于都全了。
但 Zabbix 在采集数据时,有些监控值会周期性不可用,提示“Value has unknown type 0x05”。日志如下,/var/log/zabbix_server.log
。
1 | 2137444:20220504:232103.943 item "HomeLab-TOR-S2910:net.if.in[ifHCInOctets.15]" became not supported: Value has unknown type 0x05 |
是 OID 不对吗,也不是,snmpget unsupported 的 OID,均能返回正常的值,而且并不是每个采集周期 Zabbix 都无法 Get 到值。
问题处理
最后发现是“bulk request”造成的,中文版本翻译为“批量请求”or“大量请求”。在设备采集配置中,关闭“bulk request”即可。
为什么会这样
需要了解一下什么是 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 请求时,部分响应失败,最终会只响应部分结果。