暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【QA】 Zabbix 答疑精选

Zabbix开源社区 2026-05-26
96


本文内容源自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版本,安装要求请参考:

https://www.zabbix.com/documentation/
current/en/manual/installation/requirements


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



文章转载自Zabbix开源社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论