
本文内容源自2026年3-4月Zabbix中国开源社区答疑整理,了解更多信息/参与官方答疑,请联系小Z:17502189550(同微信)。
Q1
zabbix是否能够监控KVM?
A
KVM监控通常通过脚本查询libvirt接口获取虚拟机数据,再通过Zabbix Agent或zabbix_sender将数据采集或上报到Zabbix。
Q2
告警提示“More than 100 items having missing data for more than 10 minutes”,请问这代表什么?我该如何排查原因?
A
该告警是一个系统级健康检查指标,意味着Zabbix Server队列中积压了超过100个监控项,且这些项在过去的10分钟内未能如期采集到任何数据。您需要通过Web界面的“队列详情”定位受影响的监控项类型及其所属主机,从而进行针对性的修复。
Q3
Zabbix 7.0监控项获取文本值时,点击测试提示“结果因其大小而被截断(518.46 KB)”,我想获取完整数据,该如何调整?
A
首先需要明确,这个提示通常包含两个层面的含义。
第一,这是Zabbix前端Web界面的显示保护机制,旨在防止超大文本撑爆浏览器页面,这并不代表Zabbix后端没取到数据。
第二,数据最终能否完整保存,取决于它的用途:如果是用于“低级自动发现”,数据存储在缓存中,通常不会丢失;但如果是作为普通监控项值存入数据库,则会受限于数据库字段类型的物理上限,超出64KB的部分会在入库前被截断。
Q4
使用Zabbix 7.0监控Oracle RAC有模板方案吗?或者有没有其他监控手段?RAC两个节点的监控方式是一样的吗?
A
Zabbix Agent2提供了原生的Oracle监控方案,但仅支持Oracle 12g及以上版本。对于低于12g的版本,可以通过自定义脚本的方式实现监控,比如结合SQL查询或脚本采集所需指标并上报。对于Oracle RAC,只要数据信息能够输出来,都可以自定义。
Q5
现在zabbix7.4.8使用php版本必须为8.x,安装方式还是二进制吗?
A
不建议使用7.4版本,安装要求请参考:
Q6
按操作把历史记录相关表都清除了。运行后发现,清除前那些未结束的告警不再显示了,而且即使后续新采集的数据再次满足触发条件,也不会重新显示这些旧问题的告警;但清除之后新产生的问题告警却可以正常显示。这种情况应该怎么处理?
A
这是因为在清理数据时,不仅删除了history*和trends*表,还一并清空了problem、events等事件相关表。
problem和events表本身就是用来记录告警问题和事件状态的,清空后,原来那些“未恢复”的问题记录就不存在了;但与此同时,trigger表中的value字段仍然可能保留在Problem状态。
由于你是直接截断表,而不是通过正常恢复流程让告警从Problem转为OK,因此这类触发器后续即使再次满足条件,也可能不会按预期重新产生告警。一般来说,如果只是想清理历史监控数据,建议只截断history*和trends*表,不要直接清空problem、events、alerts、acknowledges等关联关系较复杂的表,否则很容易造成告警状态异常。
Q7
目前server队列堆积到700多,尝试了多种优化措施均未见明显效果。后来发现proxy的时间比server快了1个小时,在对proxy和server进行NTP时间同步后,队列迅速恢复正常。请问这种情况是否是由于server会对proxy上报的数据进行时间校验所导致的?
A
官方文档中明确指出,Zabbix Server与所有Proxy的时间必须保持同步。Server在处理来自agent或proxy的数据时,会依据数据中的时间戳进行处理;如果时间不同步,可能会导致数据处理异常,从而引发队列堆积等问题。
Q8
lld自动发现的覆盖是怎么使用的?
A
覆盖的意思就是:在同一条低级别发现规则下,按条件对某些被发现出来的对象“改写默认原型行为”。
也就是说,LLD先按原型批量生成监控项、触发器、图形或主机;然后你可以用“覆盖”针对符合条件的对象,单独修改它们的属性,而不必再拆成多套发现规则。
举个最常见的理解:
1.你有一条网卡发现规则,会发现eth0、lo、docker0
2.默认原型会给所有网卡都创建监控项和触发器
3.想让docker*的触发器严重性更低
4.这时就可以用覆盖:
匹配{#IFNAME}以docker开头→修改名称、标签、严重性、历史保存时间等
所以它本质上就是:
“发现后,按条件对不同对象应用不同规则。”
Q9
我们对 Zabbix 的监控模板(包括宏定义),以及某些主机上特定触发器的停用状态做了一些自定义调整。在系统升级过程中,这些调整是否能够保留?
A
会保留。
升级过程本身主要是升级程序和数据库结构,不会自动把内置模板替换成新版本模板。
Q10
请问Zabbix是否支持将Prometheus的指标(/metrics)自动转换为监控项?
A
Zabbix支持采集Prometheus暴露的/metrics数据,但并非完全“自动”转换为监控项。
通常的实现方式是:通过一个HTTP agent主监控项拉取/metrics内容,然后结合dependent items(依赖监控项)和预处理规则(如Prometheus pattern或Prometheus to JSON)来提取具体指标值。
Q11
在Zabbix 6中部署了Proxy后,面板“主机概览”中显示有1台主机不可用,但在“配置→主机”页面查看时所有主机状态均为绿色。如何定位这台不可用的主机?
A
可以通过在“配置→主机”页面使用过滤器,根据主机组或主机名称进行筛选和排查,从而快速定位到对应的不可用主机。
Q12
我想监控接口带宽利用率,在zabbix7模板"Cisco IOS by SNMP"中的自动发现规则"Network interfaces discovery"增加了监控项原型:
公式:last(/Cisco IOS by SNMP/net.if.out[ifHCOutOctets.{#SNMPINDEX}])/last(/Cisco IOS by SNMP/net.if.speed[ifHighSpeed.{#SNMPINDEX}])*100
报错信息:Cannot evaluate function:item"/Cisco IOS by SNMP/net.if.out[ifHCOutOctets.10101]"
does not exist at"last(/Cisco IOS by SNMP/net.if.out[ifHCOutOctets.10101])/last(/Cisco IOS by SNMP/net.if.speed[ifHighSpeed.10101])*100".
报错是什么原因?怎样解决?
A
报错原因是计算型监控项公式里引用错了对象,报错原因是在“可计算的监控项原型”里把公式写成了:
last(/Cisco IOS by SNMP/net.if.out[ifHCOutOctets.{#SNMPINDEX}])/...
这会让Zabbix去找主机名为Cisco IOS by SNMP的那个对象上的item。
而计算型监控项的官方语法里,/host/key里的host必须是被计算引用项所在的主机;当前主机可以省略,写成//key。同时,计算型监控项要求被引用的item“必须存在并且正在采集数据”,否则就会报你看到的item"..."does not exist。
实际上你并没有”Cisco IOS by SNMP“主机,自然也找不到对应的item,只需要把公式改成:
last(//net.if.out[ifHCOutOctets.{#SNMPINDEX}])/last(//net.if.speed[ifHighSpeed.{#SNMPINDEX}])*100
即可。
Q13
请教个问题有关oracle数据库监控,通过db.odbc.get函数执行sql查询,返回监控值中的中文显示乱码应该如何处理,目标数据库是Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
数据库的NLS_CHARACTERSET:ZHS16GBK
A
可以在SQL查询执行时对字符集进行转换处理,例如使用CONVERT函数将查询结果转换为UTF-8编码。
Q14
“GoogleUpdaterService148.0.7730.0”这类Windows自动发现出来的服务不想监控,应该如何处理?
A
可以在对应的自动发现规则中通过过滤器将其排除。
通常是基于{#SERVICE.NAME}或{#SERVICE.DISPLAYNAME}进行过滤。
如果模板中已使用宏控制筛选,常见做法是修改类似如下宏:
{$SERVICE.NAME.NOT_MATCHES}
=^GoogleUpdaterService.*
这样,所有以GoogleUpdaterService开头的服务将不会被自动发现,也不会生成对应的监控项。
Q15
交换机想配置光模块自动发现,并在光模块出现故障时自动告警。请问有没有相关教程或案例可以参考?
A
可以实现,前提是交换机支持通过 SNMP 获取光模块相关信息。
一般可以通过 SNMP GET SNMP walk 获取光模块状态、收发光功率、温度、电压等 OID,再结合 Zabbix 的低级别发现(LLD)自动生成监控项和触发器,实现批量发现和故障告警。如果交换机支持主动上报告警,也可以配置 SNMP Trap,由交换机在光模块故障、插拔、LOS 等异常时主动发送告警到 Zabbix。SNMP Trap 相关配置和案例,公众号“Zabbix 开源社区”之前也有相关文章,可以搜索一下。
Q16
Zabbix 6监控网络设备时,如何查看每个IP的流量?目前只能看到接口级别的总流量。
A
Zabbix本身只能采集设备提供的指标(例如接口In/Out流量),默认情况下只能看到接口维度的总流量,无法直接解析到每个IP的通信明细。
如果需要按IP查看流量,需要依赖设备或旁路流量分析能力,例如设备支持NetFlow、sFlow或IPFIX时,可以将流量导出到流量分析系统,再将汇总结果通过API或脚本方式接入Zabbix进行展示。
如果交换机或路由器不支持流量导出协议,则Zabbix无法直接实现IP级别流量统计,一般需要引入专门的流量分析工具在网络侧完成数据解析,再进行联动监控。
Q17
如何监控设备的 SNMP 是否正常?如果 SNMP 不通,就无法获取监控数据,这种情况可以单独做告警吗?
A
可以单独监控并设置告警。
常见做法是通过 Zabbix 内部检查项 zabbix[host,snmp,available] 获取主机 SNMP 接口的可用性状态,并基于该值配置触发器告警;此外,也可以结合 nodata() 函数进行判断,当某个 SNMP 监控项在设定时间内持续未采集到数据时,触发异常告警。
通过这两种方式,可以较为有效地发现设备 SNMP 不可用或采集异常的问题。
Q18
我有一个 C 段网段,并已经添加了自动发现规则。如何区分 Linux 和 Windows 系统,并在发现后自动划分到不同的主机组中?
A
可以通过在发现规则中增加“Zabbix 客户端”类型的检查项,并将键值设置为 system.uname 来实现系统识别。
随后分别创建两个发现动作:其中一个用于识别 Linux 主机,在动作条件中设置“接收到的值包含 Linux”,并在操作中选择“添加主机”和“添加到指定主机群组”;另一个则用于识别 Windows 主机,按相同方式设置对应条件和主机组。
这样在自动发现过程中,就可以根据系统类型将主机自动分配到不同的组中。
Q19
UPS 纳管到平台后,是否可以实现当电池电量剩余 20% 时触发告警,并自动向其他服务器下发关机命令?
A
可以实现。
前提是相关服务器已安装 Agent,且平台能够采集到 UPS 电池电量指标数据。
可基于该指标创建触发器告警,并编写对应的关机脚本,再通过触发器动作配置执行脚本,从而在电池电量达到设定阈值时自动触发关机操作。
Q20
请问是否有 OpenClaw 接收告警的相关案例?
A
可以实现。
通常可通过 Zabbix 触发器动作执行自定义脚本,将告警内容按 OpenClaw 支持的接口或格式进行封装后推送过去,从而实现告警信息同步到 OpenClaw。


JOIN US





