Zabbix 已经具备最新数据、图形、仪表板、问题和服务视图,接入 Grafana 的目的不应是重复建设另一套监控入口。Grafana 更适合把多个系统的数据放到统一叙事中,为 NOC 大屏、业务容量、跨环境对比和管理视角提供灵活展示;Zabbix 仍负责采集、触发器、事件、通知和监控对象治理。

两者之间也不是 Grafana 的内置 Zabbix 数据源。当前常用方案是安装社区维护的 alexanderzobnin-zabbix-app 插件,由插件调用 Zabbix API 获取主机、监控项、历史、趋势和问题等数据。Grafana 官方插件目录提供安装入口,但这不等于它是 Grafana 核心内置数据源或 Zabbix 官方组件。生产使用前必须核对插件版本、Grafana 版本、Zabbix 版本、发布说明和维护状态。

本文以 Zabbix 7.0 LTS、自托管 Grafana 和 Grafana-Zabbix 插件为场景,完成从架构决策、安装、最小权限、数据源、变量、面板、性能、安全、版本化到故障排查的完整闭环。界面菜单会随 Grafana 版本变化,因此操作名称以当前官方文档和实际界面为准,配置原则比某一个截图路径更重要。

先定义两套平台的职责

Zabbix 是监控事实来源。主机、模板、item、trigger、event、problem、maintenance、用户权限和通知策略都在 Zabbix 中维护。Grafana 通过插件读取这些信息并组织可视化,不应绕过 Zabbix 重新实现同一套采集和告警逻辑。

Grafana 的优势是 Dashboard、Panel、变量、转换、跨数据源组合和展示治理。一个基础设施总览可以同时引用 Zabbix、Prometheus、Loki、数据库或业务 API,但每个信号的所有者仍要明确。Zabbix 问题数量与日志错误量可以放在同一页面,不能因此把两者当成同一种数据。

告警职责尤其要提前决定。若 Zabbix 已经负责触发器和通知,Grafana 主要展示 Zabbix 问题,就不要对同一指标再建立一套等价 Grafana 告警。双重告警会带来阈值漂移、重复通知和责任不清。只有在 Grafana 中进行跨数据源计算、Zabbix 无法表达的展示查询或独立业务 SLO 时,才评估 Grafana Alerting,并明确哪套是权威事件源。

集成项目开始前写出三个目标:谁使用、要回答什么问题、出现异常后去哪里处置。例如 NOC 大屏要在十秒内看出区域、业务和严重级别;值班人员点击后进入 Zabbix Problem 或 runbook;容量页面按周查看 CPU、内存和存储趋势。目标越明确,越不容易堆出几十张没有行动价值的图。

查询链路与故障边界

Grafana Zabbix 数据源插件查询流程

浏览器打开 Dashboard 后,Grafana Server 根据 Panel 和变量配置调用数据源插件。插件访问 Zabbix API,API 按用户类型、角色、用户组和主机组权限返回对象与数据。结果在 Grafana 中转换、降采样或格式化后交给浏览器渲染。

这条链路包含浏览器、反向代理、Grafana、插件、网络、Zabbix Web/API、Zabbix 数据库和权限。任何一层失败,用户都可能只看到 “Data source error” 或空图。排障时要明确请求到达哪一层,不能看到空图就重启 Zabbix Server。

Zabbix API 通常由前端端点提供,常见路径包含 api_jsonrpc.php,实际 URL 取决于部署上下文和反向代理。Grafana 应从服务端访问该地址,因此要验证 Grafana 主机或容器内的 DNS、路由、TLS 信任和代理,而不是只在管理员笔记本上测试浏览器可达。

插件可以通过 Zabbix API读取历史数据,也提供 Direct DB Connection 选项,使用 Grafana 中已有 SQL 数据源直接查询历史。插件文档说明,该方式在大时间范围可能更快并减少 API 传输,但它会扩大权限和耦合,必须谨慎评估。默认应先使用 API;只有性能证据明确、数据库团队批准并完成只读隔离后,才考虑直连。

版本和部署方式

Grafana 与插件都在持续更新,不能在文章中固定一个“永远兼容”的版本组合。部署前查看 Grafana 当前稳定版、插件目录、插件发布说明和项目文档,核对目标 Zabbix 版本。插件旧文档可能只列出较早 Zabbix 版本,因此真正上线时还要查看最新发行版说明和已知问题。

生产环境使用明确版本,不使用 grafana/grafana:latest。固定版本可以让测试、升级和回滚可重复。容器镜像有 Grafana OSS 与 Enterprise 等版本,按官方 Docker 文档选择;软件包安装则使用 Grafana 官方 APT 或 RPM 仓库。本文不复制随时间变化的完整仓库命令,执行时以 Grafana 当前安装文档为准。

无论软件包还是容器,都要持久化 Grafana 数据、配置和插件目录,并把数据库纳入备份。单机默认 SQLite 适合较小环境;高可用和多副本部署通常需要受支持的外部数据库,并配合共享或一致的插件部署。具体架构按 Grafana 官方高可用文档设计。

不要为解决目录权限直接 chmod 777。软件包安装使用 Grafana 服务账号;容器使用镜像定义的运行用户或显式受控 UID/GID,为挂载目录授予最小写权限。插件目录、配置和数据目录分开管理,敏感配置不放在世界可读文件中。

入口应使用 HTTPS。Grafana 官方文档支持在 Grafana 自身配置 HTTPS,也可以在受控反向代理终止 TLS。无论选择哪种方式,都要设置正确域名、证书、回调和安全头,限制管理入口,接入企业认证,并关闭不需要的匿名访问。

安装 Grafana-Zabbix 插件

Grafana 插件目录当前给出的 CLI 安装命令是:

bash
sudo grafana cli plugins install alexanderzobnin-zabbix-app
sudo systemctl restart grafana-server

不同 Grafana 版本可能仍提供兼容的 grafana-cli 入口,命令以目标版本官方帮助和插件页为准。安装后检查 Grafana 日志、插件目录和插件管理页面,确认插件签名、版本和加载状态。不要从未知下载站手工复制 ZIP,也不要开启允许未签名插件来规避正常安装失败。

容器环境可以在构建镜像时安装并固定插件版本,或使用 Grafana 支持的插件安装机制。更推荐构建可重复镜像,而不是容器启动后临时下载。这样测试环境和生产环境使用相同 Grafana 与插件组合,回滚也只需切换镜像版本。

离线环境应从可信环境下载官方插件目录或项目发布的制品,校验来源和完整性,再进入内部制品库。离线安装流程要记录 Grafana 版本、插件版本、文件校验和批准人。禁止把某台服务器上未确认来源的插件目录直接复制到生产。

升级插件前导出关键 Dashboard、备份 Grafana 数据库与配置,在测试环境验证数据源、变量、Panel、问题查询和 Direct DB Connection。插件升级可能改变查询模型、面板兼容或配置字段。完成测试后按环境逐步发布,保留旧镜像或插件包作为回退。

创建最小权限的 Zabbix 身份

不要使用 Zabbix AdminSuper admin 账号给 Grafana 读取数据。Zabbix API 权限取决于用户类型、用户角色、用户组和主机组权限。应创建专用身份,例如 svc_grafana_readonly,只允许读取需要展示的主机组,并在角色中限制不需要的 API 方法。

如果一个 Grafana 实例服务多个团队,可以按环境或权限域创建多个 Zabbix 数据源和服务身份。生产、测试、网络和制造区域不必共用一个拥有全局读取权限的账号。数据源命名中体现环境和范围,例如 zabbix-prod-infrazabbix-prod-network,便于 Dashboard 审计。

Zabbix 支持 API token 管理,是否由当前插件版本和认证配置直接支持,应在插件当前文档与测试环境中确认。能够使用 token 时,优先设置用途、到期时间和轮换;若插件要求用户名密码,则使用专用低权限账号,将密码保存在 Grafana secure JSON 配置或外部密钥系统,不写入 Dashboard JSON 和普通 provisioning 文件。

账号权限测试不能只看 “Save & test”。使用该身份登录或调用 API,确认它看不到未授权主机组,能够读取目标 item、history、trend 和 problem,并且不能修改配置。权限过小会导致变量列表为空或部分 Panel 无数据,权限过大则让任何可查询数据源的 Grafana 用户间接扩大读取范围。

Grafana 开源版与 Enterprise/Cloud 在细粒度数据源权限方面能力不同。Grafana 官方说明,默认情况下组织内可查询数据源的用户可能发起数据源允许的查询,而不仅限于现有 Dashboard。设计权限时必须以 Zabbix 服务身份的最小范围作为第一道边界,不能只依赖 Grafana 文件夹隐藏。

配置数据源

Grafana 配置 Zabbix 数据源步骤

安装插件后,在 Grafana 的 Connections 或 Data sources 区域添加 Zabbix 数据源。填写名称、Zabbix API URL、认证信息和插件选项。界面字段随插件版本变化,以下验收逻辑保持不变:URL 由 Grafana Server 可达;证书链受信;认证成功;返回的 Zabbix API 版本符合预期;目标主机组和 item 可以查询。

API URL 不要直接写成浏览器首页,也不要遗漏部署子路径。例如 Zabbix 位于反向代理的 /zabbix/ 下,API 路径通常也在该上下文中。通过 curl 或等价工具从 Grafana 运行环境验证 TLS 和 HTTP 响应时,不应在命令行暴露生产密码。容器部署要进入同一网络命名空间测试。

插件配置通常包含 trends、trends from、cache TTL、timeout、数据对齐等选项。阈值不能机械照抄。TrendsFrom 应结合 Zabbix item 的 history/trends 保留期和 Dashboard 常用范围:短范围使用 history 保留细节,长范围切换 trends 降低点数。若某 item 不保存 trends,长范围查询可能为空或退回其他路径。

Cache TTL 是查询结果在插件侧的缓存策略之一,不等于 Grafana Enterprise/Cloud 的数据源查询缓存能力,也不等于 Zabbix API 自身缓存。实时 NOC 页面需要较短刷新和缓存,月度容量页面可以更长。设置时明确允许的数据陈旧时间,并用实测确认。

Timeout 应覆盖正常查询但不能掩盖无限扩张的 Dashboard。一个面板需要几分钟返回,优先缩小时间范围、变量和查询,而不是把超时持续加大。API、反向代理和 Grafana 各层超时还要协调,避免上层已放弃、下层仍在执行。

点击连接测试成功后,再创建一个最小 Panel 查询单台主机单个数值 item,依次验证最近十五分钟、一天和较长范围。随后测试问题查询、变量和一个无权限主机组。只有正向和负向都符合预期,数据源才算通过验收。

是否启用 Direct DB Connection

Direct DB Connection 让插件通过 Grafana 的 MySQL、PostgreSQL 或其他支持 SQL 数据源读取 Zabbix 历史数据库。优势是大范围历史查询可能更快,代价是 Grafana 获得数据库读取路径,绕过部分 API 抽象,并与 Zabbix schema、数据库高可用和升级更紧密耦合。

启用前至少满足五个条件:API 查询的确是瓶颈;目标插件和数据库类型受支持;数据库团队批准;使用专用只读账号;已在测试环境覆盖升级和故障切换。只读账号应限制来源地址、数据库和必要表,不授予写入、DDL 或管理权限。连接使用 TLS,凭据进入 secure 配置。

不要直接复用 Zabbix Server 的数据库账号。该账号通常拥有应用所需写权限,一旦 Grafana 或插件受损,风险会扩大。也不要让大量大屏无节制查询主库。可以评估只读副本,但要理解复制延迟会让图表落后,且 Zabbix 数据库 schema 和复制拓扑仍需官方支持范围内维护。

直连后的性能验收同时看 Grafana 查询时间和数据库代价。一个 Panel 从十秒降到两秒,但把主库 I/O 拉满,并不是成功。记录查询范围、并发、返回点数、执行计划、锁和复制延迟;为 Dashboard 设置合理刷新,避免每个用户都重复扫描大时间范围。

若插件升级或 Zabbix 升级改变查询兼容,回退路径应是关闭 Direct DB Connection 并恢复 API,而不是现场修改 Zabbix schema。把开关、数据源 UID 和凭据管理写入发布手册。

从一个可用仪表盘开始

Grafana 运维仪表盘布局设计

第一个 Dashboard 不要追求覆盖全部指标。选择一个明确场景,例如“Linux 主机运行总览”。页面顶部放环境、主机组和主机变量;第一行展示可用性、当前问题、CPU、内存和磁盘风险;第二行展示 CPU、内存、磁盘和网络趋势;底部提供问题明细和跳转。

每个 Panel 都要回答一个问题。Stat 用于当前状态;Time series 用于变化趋势;Table 用于主机或问题明细;Bar gauge 适合横向比较;Heatmap 只有在数据具有分布意义时才使用。不要因为 Grafana 图表丰富就把同一数据做成折线、饼图和仪表盘三份。

单位、最小值、最大值和阈值要来自 item 语义。CPU 利用率可以使用百分比,网络流量使用 bit/s 或 byte/s,存储使用字节或百分比。若 Zabbix item 已包含单位,检查插件是否正确映射;不要为了视觉效果手工乘除后忘记在标题说明。

阈值颜色不能替代 Zabbix 触发器。Panel 中的红色可以帮助阅读,但它不会自动成为 Zabbix 问题,也可能与动态宏阈值不同。关键故障状态应优先展示 Zabbix trigger/problem;性能曲线上的阈值线作为辅助,并在 Dashboard 说明来源。

链接是集成价值的重要部分。主机、问题或 Panel 可以跳转到 Zabbix 对应页面、CMDB、日志平台或 runbook。链接参数要经过 URL 编码并限制可信目标。最终用户从红色状态到处置证据的路径,应该比在两个系统间手工搜索更短。

变量设计决定查询规模

Grafana 变量与高级查询设计

变量让一个 Dashboard 服务多个主机,但也最容易制造查询爆炸。常见链路是数据源、环境、主机组、主机、应用和 item。下游变量引用上游选择,使查询范围逐步收敛。不要默认让所有主机组和所有主机同时选中。

变量名称使用稳定英文标识,如 datasourcegrouphost,显示标签可以中文。Dashboard 查询引用变量而不是硬编码主机。多环境场景先选数据源,再选组和主机,避免不同 Zabbix 环境中同名对象混淆。

多选和 Include All 要谨慎。All 对五台主机方便,对五千台主机可能生成大量 API 请求和时间序列。可以限制变量正则、拆分团队 Dashboard、设置安全默认值,或为总览单独使用聚合指标。变量刷新时机也影响负载,不需要每次时间范围变化都重新获取主机列表。

变量链需要测试空值、单选、多选、对象重命名和无权限场景。变量为空时,Panel 应显示可理解的无数据状态,而不是静默展示旧值。主机或组名称包含正则特殊字符时,要确认插件匹配方式,避免过宽查询。

可重复 Panel 或 Row 可以按变量生成多个视图,但数量失控会让浏览器和 Grafana 同时承压。与其为一百台主机重复一百张图,不如先用表格排序找出异常,再点击下钻到单主机详情。

Zabbix history 保存原始采集值,trends 对数值型数据按小时保存聚合。短时间排障依赖 history,季度或年度容量更适合 trends。插件可以根据时间范围切换,但前提是 Zabbix 对应 item 保存了所需数据,且数据源配置与 Dashboard 目标一致。

设计 Panel 时计算点数预算。假设几十台主机、多个 item、七天范围、短采集间隔,原始点数会快速增长。Grafana 即使能渲染,API、网络和浏览器也会付出成本。缩小默认范围、使用 trends、合理聚合、减少系列和按需下钻,比单纯增加 timeout 更有效。

刷新间隔必须大于或匹配数据更新间隔。item 每五分钟采集一次,Dashboard 每五秒刷新不会获得新信息,只会重复查询。NOC 页面可按关键指标间隔设置刷新;容量页面通常不需要自动刷新;管理汇报页面甚至可以固定时间范围。

缺口不能随意连接。主机无数据、Proxy 断网或 item unsupported 时,折线跨越缺口可能让用户误以为连续正常。Panel 的 null 处理按业务语义配置,必要时同时展示数据新鲜度或 nodata 状态。

聚合函数也要匹配问题。平均值适合平滑趋势,但可能掩盖尖峰;最大值适合容量风险;总和适合流量或请求累计时要确认 item 类型;差值和速率需要理解计数器重置。Grafana transform 不能补救错误的原始 item 语义。

性能和缓存

Grafana Zabbix 查询性能与缓存优化

性能优化从最贵的 Dashboard 开始。Grafana 日志、浏览器网络面板和 Zabbix API/数据库指标可以定位慢查询。记录 Dashboard UID、Panel、时间范围、变量、返回系列和耗时。不要只看用户说“很卡”,也不要把所有问题归因于插件。

第一层优化是缩小查询:减少默认时间、主机和 item;避免正则匹配全部对象;降低重复 Panel;删除无人使用的查询。第二层是选择正确数据:长范围使用 trends,必要时评估 Direct DB Connection。第三层才是缓存、Grafana 资源和横向扩展。

Grafana 官方提供的数据源查询缓存能力在不同版本和产品形态中可用性不同,不能假定开源版必然具备同样功能。插件自身的 cache TTL 与 Grafana 平台缓存要分别理解。启用任何缓存前,定义最大陈旧时间,并确认问题页面不会因为缓存继续显示已恢复状态。

多个电视墙使用同一 Dashboard 时,会形成稳定查询负载。可以降低刷新、错开打开时间、为大屏设计轻量总览,并避免浏览器标签长期保留大量不可见 Panel。Grafana Server、反向代理、Zabbix API 和数据库都要监控。

Grafana 自身应纳入监控。官方文档说明 Grafana 暴露 Prometheus 格式的 /metrics,也可以通过日志和数据库指标观察。至少监控进程、HTTP 错误、请求延迟、资源、数据库、插件加载和磁盘。Zabbix 可以采集这些指标,但不要形成一个无法判断主因的循环依赖;保留基础系统监控路径。

Dashboard as Code

手工在生产 UI 修改 Dashboard 很快,但难以审计、复现和回退。Grafana provisioning 支持通过配置文件定义数据源和 Dashboard,文件可以进入版本控制。插件也提供 Zabbix 数据源 provisioning 示例。生产环境应逐步把稳定 Dashboard、数据源 UID 和文件夹结构纳入代码管理。

数据源 provisioning 中,普通字段放 jsonData,敏感字段放 secureJsonData 或使用受支持的密钥注入方式。即便 secure 字段不会通过 API 原样返回,YAML 源文件仍不能提交明文生产密码。部署系统从密钥库渲染或注入。

为数据源设置稳定 UID,Dashboard 引用 UID 而不是环境自动生成 ID。不同环境使用相同逻辑 UID 或明确映射,导入时不会随机指向错误数据源。Dashboard JSON 中删除环境特有的临时值,把差异放在数据源或变量。

代码评审重点不是 JSON 格式,而是查询范围、默认时间、刷新、变量 All、权限、链接和可读性。CI 可以做 JSON/YAML 语法、禁止明文秘密、数据源 UID、刷新下限和标题规范检查。测试环境连接代表性 Zabbix 数据后,再发布生产。

Grafana 新版本还提供更丰富的 observability as code 和 Git Sync 能力,但可用版本与产品形态会变化。选择传统 provisioning、Terraform、Git Sync 或其他方式前查当前官方文档。核心目标是可版本化和可回滚,而不是追逐某个最新入口。

三类仪表盘的设计方法

第一类是值班总览。它要在几十秒内回答“哪里出问题、影响多大、先处理什么”。首屏只放当前严重问题数、受影响主机或服务、区域状态、数据新鲜度和关键依赖。趋势图数量保持克制,问题表按严重级别和持续时间排序,并提供 Zabbix 问题详情和 runbook 链接。总览默认时间范围不宜过长,因为它关注当前处置。

值班总览不能只显示红绿灯。若 Zabbix API 或插件本身中断,所有 Panel 可能无数据,页面不能把无数据误画成绿色。至少有一个数据源健康或最后更新时间提示,区分“业务正常”和“监控不可用”。维护中的主机和被抑制问题也应有清晰表示,避免值班人员把计划变更当事故。

第二类是单对象排障页。变量通常收敛到一个环境和一个主机,内容按排障顺序排列:可用性与问题、CPU 和负载、内存与交换、磁盘容量与延迟、网络流量与错误、关键进程或服务,最后是最近事件和跳转链接。相关曲线使用相同时间轴,便于判断资源变化的先后关系。

排障页不要把所有 item 全部展示。选择能区分根因的信号,例如 CPU 使用率配合负载和 iowait,内存使用配合可用内存与 swap,磁盘容量配合 I/O 延迟。若某指标来自 dependent item 或计算 item,在 Panel 描述中写明来源。异常时用户应能从图表回到 Zabbix item 和 trigger,而不是只看到二次加工后的数值。

第三类是容量与管理页。它关注周、月、季度趋势,优先使用 trends 和聚合,展示峰值、分位或增长率,而不是每个原始点。按业务、区域、集群或资源池汇总,并提供异常对象排行榜。容量页默认关闭高频自动刷新,避免对历史数据库产生没有价值的重复查询。

管理页中的百分比必须说明分母和范围。例如“存储使用率”是某个卷、主机总量还是资源池可分配容量;“主机可用率”是否排除维护窗口;“问题数量”是新发生、未恢复还是累计。Grafana 可以做转换,但指标口径应在 Zabbix、CMDB 或正式数据定义中管理,不能只存在某个 Panel 的表达式里。

三类 Dashboard 可以共享数据源和变量命名,但不应复制成同一套布局。总览强调发现和优先级,排障页强调时间相关性,容量页强调长期比较。结构随使用任务变化,才能避免所有页面都是四张资源曲线加一张问题表。

版本升级与迁移

Grafana、插件和 Zabbix 任一方升级,都可能影响集成。升级前建立兼容清单:当前与目标 Grafana 版本、插件版本、Zabbix 版本、认证方式、API URL、Direct DB Connection、Dashboard schema、数据源 provisioning 和已知定制。保存 Grafana 数据库、配置、插件清单与 Dashboard 代码。

在测试环境恢复生产配置副本,但使用脱敏或受控数据源。逐项验证插件加载、数据源测试、变量、history、trends、problem、链接、告警和直连数据库。选择访问最多和查询最重的 Dashboard 做基准,对比升级前后加载时间和返回结果。只验证登录成功远远不够。

生产升级采用可回滚发布。容器环境保留旧镜像和数据库备份,软件包环境保留旧包与配置;高可用实例按节点滚动时确认插件目录和数据库迁移要求。升级后先观察 Grafana 日志与健康,再开放用户,避免所有电视墙同时刷新形成启动峰值。

若插件新版本改变查询或变量行为,不要直接在生产逐张修图。先在分支更新 Dashboard,记录兼容修改,测试后统一发布。无法在窗口内修复时回退插件或 Grafana 组合。不要通过开启未签名插件、关闭安全检查或直接修改 Grafana 数据库来强行继续。

从手工环境迁移到 provisioning 时,先导出现有 Dashboard,清理重复数据源和随机 UID,确定文件夹与所有者,再逐个纳管。被 provisioning 管理的资源在 UI 中可能只读或由文件覆盖,因此要培训编辑者通过代码流程修改。迁移完成后验证重启 Grafana 能从空环境恢复相同数据源和 Dashboard。

跨环境迁移要把秘密和环境地址剥离。Dashboard 只引用稳定数据源 UID,测试和生产分别提供对应 datasource provisioning;Zabbix URL、账号和密码不写入 Dashboard。发布后用测试账号确认生产页面不会错误指向测试 Zabbix,也不会因同名数据源连接到错误环境。

安全设计

Grafana 与 Zabbix 之间使用 HTTPS,并让 Grafana 信任内部 CA。关闭跳过证书验证只能用于短期诊断,不能成为生产常态。证书名称必须匹配 API URL,证书到期纳入监控。

服务身份只读、分域、可轮换。Grafana 管理员和 Dashboard 编辑者使用企业 SSO 或受控本地账号,最小化组织管理员数量。匿名大屏如确有需要,应放在隔离网络,只展示经过审查的数据,不开放编辑和任意查询。

插件属于供应链组件。记录来源、版本、签名状态、许可证和升级责任,关注安全公告。Grafana、插件和 Zabbix 升级前在测试环境验证,不能因为“只是可视化”忽视插件运行在 Grafana Server 中的权限。

Dashboard 可能泄露主机名、IP、业务名称、问题描述和标签。对管理层、外包和公共大屏使用不同文件夹、组织或实例,不能只隐藏某个 Panel。Zabbix 服务账号权限是最后边界,Grafana 用户能查询的数据不应超过其业务需要。

Direct DB Connection 的数据库账号必须只读、限制网络来源和必要 schema,审计查询并设置资源保护。不要在 Panel 中执行任意 SQL,也不要允许 Dashboard 编辑者利用 SQL 数据源读取不相关表。数据源权限的具体能力按 Grafana 版本和授权核对。

故障排查

Grafana Zabbix 集成故障排查路径

第一类故障是插件未加载。检查插件管理页面、Grafana 启动日志、插件目录权限、签名和版本兼容。若升级后失败,用已验证的旧版本回退,不要直接允许未签名插件。容器环境确认每个副本都包含相同插件。

第二类是数据源连接失败。从 Grafana 运行环境解析 Zabbix 域名,验证 TCP、TLS 和 API URL;检查反向代理路径和认证;查看 Grafana 与 Zabbix Web 日志。浏览器能打开 Zabbix 首页不能证明 Grafana Server 能访问 API。

第三类是连接成功但变量或 Panel 为空。检查 Zabbix 服务账号的用户组、主机组和角色权限,确认目标 item 已启用并有数据,查看时间范围、history/trends 保留和插件查询过滤。用单主机单 item 最小查询逐步增加条件。

第四类是部分时间范围无数据。短范围正常、长范围为空,优先检查 trends 配置、item 是否保存 trends、TrendsFrom 和数据保留;长范围正常、最近数据缺失,检查 Zabbix latest data、Proxy、history 和时间同步。不要先改 Grafana 时区掩盖采集缺口。

第五类是 Dashboard 慢。记录慢 Panel,缩小变量和时间范围,查看 API 或 Direct DB 查询,检查刷新和重复 Panel。若所有 Dashboard 都慢,检查 Grafana 数据库、CPU、内存、反向代理和插件错误。若只有 Zabbix 数据源慢,对比 Zabbix 前端和 API。

第六类是显示值错误。核对 item 单位、预处理、值类型、Grafana unit、transform、聚合和时间区域。计数器需要速率时,确认函数处理重置。不要通过手工常数“修正”一个本应在 Zabbix item 定义中解决的单位错误。

上线验收与运行治理

数据源验收包括 API 可达、证书、认证、权限正向与负向测试、短期 history、长期 trends、problem 查询、变量和超时。Dashboard 验收包括目标用户、默认范围、刷新、空数据、单位、阈值、链接、移动或大屏显示,以及在目标并发下的查询耗时。

验收结论必须同时覆盖数据正确、权限正确、性能可接受和故障可识别,不能只以页面能够打开作为上线标准。

故障演练至少覆盖 Zabbix API 不可用、Grafana 重启、插件回退、凭据轮换、证书更新和一个权限变更。启用 Direct DB Connection 时再覆盖数据库只读连接失败、主从切换和关闭直连回退 API。演练要确认页面明确显示数据不可用,而不是保留过期图形误导值班人员。

运行中每月复审最慢 Dashboard、无人访问页面、刷新过快页面、数据源权限、服务身份到期和插件更新。每季度抽查 Dashboard 中每个关键 Panel 是否仍有行动价值,删除重复或失去所有者的页面。可视化也会产生技术债。

Dashboard 应有所有者、用途、数据源、目标受众、更新日期和故障反馈入口。重大模板或 Zabbix item 变更要通知 Dashboard 所有者,因为 item 名称、单位或主机组变化可能让图表静默失效。

常见反模式

第一,把社区插件写成 Grafana 内置 Zabbix 支持。第二,用 Zabbix 超级管理员账号连接。第三,使用 latest 镜像和不固定插件版本。第四,给挂载目录 chmod 777。第五,为了连接成功长期关闭 TLS 校验。第六,所有变量默认 All。

第七,每个 Dashboard 都重复建立 Zabbix 告警。第八,长范围仍强制读取原始 history。第九,连接测试成功就跳过权限和负向验收。第十,直接用 Zabbix 应用数据库账号做 Direct DB Connection。第十一,在 Dashboard JSON 中保存密码。第十二,生产 UI 随意修改但没有版本和回退。

最隐蔽的反模式是“图越多越专业”。一个页面同时加载上百条时间序列,不仅慢,也会让异常淹没。总览负责发现,详情负责解释,Zabbix Problem 和 runbook 负责处置。页面层次清晰比图表数量更重要。

小结

Zabbix 与 Grafana 集成的核心不是安装插件,而是建立清晰职责和受控查询链路。Zabbix 继续作为采集、事件和告警事实源;Grafana 通过社区插件读取 API,使用最小权限身份,把 history、trends、问题和多数据源组织成面向场景的 Dashboard。

生产落地要固定 Grafana 与插件版本,使用 HTTPS 和专用只读账号,从单主机单 item 验证数据源,再设计收敛的变量和点数预算。只有 API 成为明确瓶颈时才评估 Direct DB Connection,并使用独立只读账号。最终通过 provisioning 或其他 as-code 方法把数据源和 Dashboard 版本化,持续治理性能、权限与页面价值。

本篇完成 Zabbix 实战系列从基础安装、Agent、模板、告警、自动发现、服务器与数据库监控、分布式架构、性能治理到外部可视化的闭环。后续扩展可以围绕升级迁移、安全加固、HA、API 自动化和真实故障复盘继续深化。

参考资料