Grafana接进Zabbix可视化平台:连接报错排查与搭建指南
把 Grafana 接进 Zabbix 可视化平台这件事我在生产环境里做过好几次但每次换一套环境最稳定的见面礼就是数据源保存时报那个 Could not connect to given url。这个报错看起来很劝退实际上大部分时候是 URL 写法、网络链路或者认证方式的问题。我见过不少同事在这里卡了一下午最后发现只是少写了一段/api_jsonrpc.php。这篇文章会把整套搭建流程、报错排查链路、以及我反复踩过的坑全部过一遍给正准备搭可视化平台的运维同学一条能直接跟着走的路少耗一点在这种本该五分钟解决的问题上。1. 为什么非要折腾 Grafana 来看 Zabbix 的数据先说结论Zabbix 不是不能画图但当你需要把几十台主机的状态放在一块大屏上、按业务维度横向对比、甚至把 Zabbix 的监控数据和另外一套系统的指标叠在同一条时间线上时Zabbix 原生界面会非常吃力。这也是我在多个项目里最终选择 Grafana Zabbix 组合的根本原因。1.1 Zabbix 原生界面的三个明显短板第一个短板是图形样式偏老。Zabbix 自带的 Simple Graph 虽然能出趋势图但线条样式、调色、坐标轴控制都比较有限想做一个能让业务部门看得懂、觉得专业的监控大屏很吃力。第二个短板是多主机对比效率低。Zabbix 默认的图形系统更偏向单台主机看单指标虽然也能做聚合图形Aggregate Graph但配置起来繁琐且交互方式不友好在大屏上的展示效果大打折扣。第三个短板是权限与展示的分层不够灵活。你可能会希望给管理层一个只读展示页、给运维组一个可交互的排查页面、给开发组只看自己服务的面板在 Zabbix 前端里做这种细粒度展示配置虽然可行但体验远不如 Grafana 来得顺畅。1.2 Grafana 在监控展示上的优势点Grafana 本身就是为统一可视化而生的。它支持几十种数据源Zabbix 只是其中之一后续你想把 Prometheus、InfluxDB、Elasticsearch 的数据也接进来可以在同一套面板上并排展示不需要再切系统。Grafana 的 Dashboard 体系也成熟得多变量联动、模板复用、JSON 导入导出、团队文件夹权限管理这些都是日常运维里高频用到的能力。对于已经有 Zabbix 做采集和告警、又不想彻底迁移监控体系的团队来说加一层 Grafana 作为展示层几乎是性价比最高的方案。它不替代 Zabbix 的采集和告警只负责把数据变得更好看、更好用。2. 动手前的环境盘点和 API 自检在装 Grafana 之前我建议先花十分钟确认一下 Zabbix 侧的底子。很多人一上来就装 Grafana装完插件发现连不上回头才发现 Zabbix API 本身都没通。2.1 本次搭建的软件环境我这篇的搭建环境供参考Zabbix 用的是 7.0 LTS跑在 Rocky Linux 9 上Nginx PHP-FPM 部署数据库是 MySQLGrafana 是 11.x安装在一台独立的 CentOS 7.9 服务器上通过内网访问 Zabbix 服务器。版本组合很关键尤其是 Zabbix 7.0 的默认管理员是Admin不是老版本的admin登录认证逻辑也有变化用旧习惯容易在认证环节栽跟头。Grafana 服务器和 Zabbix 服务器的网络关系比较简单两台都在同一个网段没有额外的安全组拦截。如果你用的是云主机记得提前确认安全组规则放通了对应端口不然下面所有排查都会绕远路。2.2 用 curl 验证 Zabbix API 是否已经就绪Zabbix 数据源插件的连接逻辑本质上就是向 Zabbix 的 API 地址发请求。只要 API 能通数据源配置就成功了一大半。所以我会先在任何图形界面操作之前在 Grafana 服务器上手动调一次 APIcurl -i -X POST \ -H Content-Type: application/json \ -d {jsonrpc:2.0,method:user.login,params:{username:Admin,password:zabbix},id:1} \ http://192.168.10.10/zabbix/api_jsonrpc.php正常返回的 JSON 里会有一个result字段里面是一长串 token像这样{jsonrpc:2.0,result:eyJhbGciOiJIUzI1NiJ9.xxxxxxxx,id:1}如果看到{error:{code:-32602,message:Invalid params}}说明认证信息不对如果连接超时或拒绝那就说明网络层有问题先不要碰 Grafana。这一步能最大程度把问题范围缩小避免后面在 Grafana 界面里反复试错。2.3 给 Grafana 单独建一个监控账号我不建议在 Grafana 数据源里直接用 Zabbix 的超级管理员账号。一是安全风险二是权限不好控制。请在 Zabbix 前端单独建一个用户比如叫grafana属于一个新建的用户组grafana-group给这个组只配置对需要展示的主机组授予只读权限。这样做的好处是即使 Grafana 数据源配置被谁误改、泄露也只会影响读操作Zabbix 侧的配置不会被改掉。Zabbix 7.0 创建用户时要注意用户类型选择Zabbix User即可不要给超级管理员。密码建议设置复杂一些并且要和zabbix默认密码区分开。如果以后要换密码Zabbix 侧改完后 Grafana 数据源同步更新即可。3. Grafana 安装、Zabbix 插件部署与启用环境没问题之后开始在 Grafana 服务器上装本体和插件。这一步相对流程化但有几个细节容易忽略我一个个说。3.1 用 YUM 装 GrafanaGrafana 官方提供了 RPM 源装起来很简单。先写 repo 文件sudo tee /etc/yum.repos.d/grafana.repo EOF [grafana] namegrafana baseurlhttps://packages.grafana.com/oss/rpm repo_gpgcheck1 enabled1 gpgcheck1 gpgkeyhttps://packages.grafana.com/gpg.key sslverify1 sslcacert/etc/pki/tls/certs/ca-bundle.crt EOF然后安装并启动sudo yum install -y grafana sudo systemctl daemon-reload sudo systemctl enable --now grafana-server装完先访问一下http://Grafana服务器IP:3000默认用户名密码是admin/admin首次登录会强制改密码。这一步别跳过很多人装完直接装插件结果连 Grafana 都没起来插件验证自然无从谈起。Grafana 默认监听 3000 端口如果前面还有 Nginx 反代一定要先把端口测通再考虑反代。3.2 安装 Zabbix 数据源插件Grafana 社区里最常用的 Zabbix 插件是alexanderzobnin-zabbix-app。安装就一条命令sudo grafana-cli plugins install alexanderzobnin-zabbix-app sudo systemctl restart grafana-server安装完成后去 Grafana 的 Administration → Plugins 页面搜索 Zabbix会看到这个插件点击进入后选择 Enable。这一步很多人漏了插件装完不启用后面添加数据源时根本搜不到 Zabbix 类型。如果插件列表里没有多半是 grafana-server 没重启或者插件下载到了错误目录。可以用grafana-cli plugins ls确认插件是否被识别。3.3 数据源配置页面里的三个关键字段插件启用后在 Connections → Data Sources → Add data source 里搜索 Zabbix进入配置页面。有三个关键字段需要留意字段正确填法常见错误URLhttp://192.168.10.10/zabbix/api_jsonrpc.phphttp://192.168.10.10/zabbixAuth 类型Basic auth / API Token选了别的认证方式用户名/密码grafana 专用账号填了 Admin 但密码错误URL 字段是核心后面报错绝大多数都和它有关。保存前按页面底部的 Save Test 进行测试然后就会看到那个熟悉的报错。接下来我们集中精力把它干掉。4. Could not connect to given url 完整排查链路这个报错表面上只告诉你连不上但背后的原因可能吵出五六种口味。我按排查顺序整理了六个站点每站都有验证方法按照这个顺序走完基本能定位九成以上的问题。4.1 第一站URL 到底该填哪个地址这是最高频的坑。Grafana 的 Zabbix 插件要连的是 API 入口不是 Zabbix Web 前端入口。如果 Zabbix 部署在根路径URL 是http://IP/api_jsonrpc.php如果 Zabbix 前端放在子路径/zabbix下URL 是http://IP/zabbix/api_jsonrpc.php。判断方法很简单在浏览器里访问 Zabbix 首页看地址栏。如果是http://IP/zabbix/那 URL 就带上/zabbix如果是http://zabbix.example.com/直接打开那就不用带子路径。我这里填的就是http://192.168.10.10/zabbix/api_jsonrpc.php。常见错误是填成http://192.168.10.10/zabbix或者漏掉api_jsonrpc.php插件会拿这个地址去请求 API自然连不上。还有一点URL 里的协议不能搞错。Zabbix 内部如果只监听 HTTP你填 HTTPS 一定会失败。有些环境里 Zabbix 前端用 Nginx 做了 SSL 终结但 API 监听在本地 HTTP外部访问通过 HTTPS 才通那 URL 就要填 HTTPS。这个用 curl 验证时一并确认。4.2 第二站Grafana 服务器到 Zabbix 的链路如果 URL 填对了还是报错第二步确认网络链路。这里特别强调不是在你电脑浏览器上测试而是在 Grafana 服务器上测试。因为这个连接是 Grafana 后端发出的不是你的浏览器发出的。curl -v http://192.168.10.10/zabbix/api_jsonrpc.php如果超时或者Connection refused检查防火墙和网络Grafana 服务器是否能 ping 通 Zabbix 服务器Zabbix 服务器的防火墙是否放行了 80/443 端口firewall-cmd --list-all云环境安全组是否放行相应端口另外如果你在 Grafana 服务器上配置了全局 HTTP 代理环境变量HTTP_PROXY/HTTPS_PROXYcurl 和 Grafana 都可能会走代理这时候内网地址可能被代理拒绝。我之前就遇到过一台服务器上设置了系统代理的坑Grafana 请求内网 Zabbix 被代理服务器拦截报错一模一样。排查方法是在 grafana-server 的启动环境里临时清掉代理变量或者确认代理配置对192.168.x.x这类内网地址不做转发。4.3 第三站Zabbix API 本身是不是活着网络通了但 API 可能本身有问题。在 Zabbix 服务器本机上执行同样的 curl 命令curl -X POST \ -H Content-Type: application/json \ -d {jsonrpc:2.0,method:apiinfo.version,params:{},id:1} \ http://127.0.0.1/zabbix/api_jsonrpc.php如果返回版本号 JSON比如{jsonrpc:2.0,result:7.0.0,id:1}说明 API 进程正常。如果返回 HTML 错误页或者 500那是 Zabbix 侧的 PHP-FPM、Nginx 或数据库出了问题跟 Grafana 无关。需要留意的是用 Nginx PHP-FPM 部署 Zabbix 时API 对 PHP 的post_max_size、max_execution_time等参数有要求。特别是 Zabbix 7.0PHP 版本要求 8.1 以上PHP-FPM 进程异常会导致 API 要么 502要么长时间无响应。Grafana 这边等待超时后就会表现为 Could not connect to given url。如果你发现 curl 请求 API 要好几秒才返回那就算连上后续查数据也会很卡建议先优化 Zabbix 侧。4.4 第四站账号权限与认证方式API 通了却报同样的错误还有一种可能是插件在调用user.login时被 Zabbix 拒绝了。插件的处理方式是你填了用户名密码它先调user.login拿 token再拿 token 去查数据。如果用户名不对、密码不对、用户被禁用、或者用户类型不允许 API 访问登录失败最终也会表现为连接错误。复制粘贴用户名时特别小心。Zabbix 5.0 之后默认管理员是Admin大写 A不是admin。如果你用旧版本的记忆去填admin会认证失败。另外如果密码里有特殊字符比如、#注意有没有被输入的浏览器插件或密码管理器干扰。建议在 Zabbix 前端里用 curl 验证一下专用账号的登录curl -X POST \ -H Content-Type: application/json \ -d {jsonrpc:2.0,method:user.login,params:{username:grafana,password:你的密码},id:1} \ http://192.168.10.10/zabbix/api_jsonrpc.php如果返回 token说明账号没问题。另外如果你的 Zabbix 开了Auth配置里的 IP 限制或登录失败锁定策略也要注意是否把 Grafana 服务器 IP 误伤了。4.5 第五站TLS 证书和反向代理的干扰如果你配置的 Zabbix 是 HTTPS 访问而且用的自签名证书Grafana 在 SSL 校验时会直接拒绝连接。插件在数据源配置的高级设置里提供了跳过 TLS 验证的选项不同版本位置略有差异一般在TLS settings或Advanced settings里。如果实在找不到可以在 Grafana 的grafana.ini中设置skip_tls_verify true指 Grafana 自身作为客户端去请求外部时跳过证书校验但这是在数据源层面做的。还有一种常见干扰是反向代理。很多人用 Nginx 反代 Grafana 和 Zabbix如果反代配置里对/api/datasources/proxy/路径做了额外拦截或者proxy_read_timeout设置太短数据源测试时也容易报连接失败。排查方法是暂时绕过反向代理直接用 IP:3000 访问 Grafana 测试如果直连能通而反代后不通问题锁定在反代配置上。4.6 第六站插件和 Grafana 的版本兼容最后检查版本矩阵。alexanderzobnin-zabbix-app插件更新很快不同版本对 Grafana 版本有要求。比如老版本的插件可能在 Grafana 11 上无法正常加载。如果你是从旧环境迁移过来的数据源配置或者grafana-cli plugins update之后没重启也可能出现这种问题。查看 Grafana 日志是最直接的定位手段journalctl -u grafana-server -f tail -f /var/log/grafana/grafana.log日志里通常会给出比界面上更具体的错误比如超时、404、401、证书错误等。我之前遇到过插件内报错显示Get http://...: context deadline exceeded这明显是超时而 Zabbix 端 PHP-FPM 负载太高处理不过来。把 Zabbix 侧优化完Grafana 这边连重试都不用直接好了。5. 数据源连通后第一个 Zabbix 看板怎么搭连接问题解决后别急着关页面先确认数据是不是真的能从 Zabbix 拉出来。在数据源页面点击 Explore或者随便选一个主机尝试加载图表能看到数据了再开始建 Dashboard。5.1 先套用社区面板还是自己画Grafana 社区有很多现成的 Zabbix 面板可以在 Dashboards → Import 页面输入关键词搜索比如zabbix找一个 star 数高的导入。导入后可能需要重新选择数据源、刷新变量。选模板时注意看一下模板支持的 Zabbix 版本和 Zabbix 插件版本老模板在 Zabbix 7.0 上可能拿不到数据因为 API 返回结构有调整。如果你不想依赖模板自己从零建第一个面板也很简单。新增一个 Time series 面板数据源选 Zabbix然后在 Query 里选主机、应用集、监控项。Zabbix 数据源的查询方式比较友好基本是下拉选择熟悉 Zabbix 里的监控项路径后五分钟就能出第一张图。5.2 经典图表的变量联动配置面板一旦多起来逐台主机切换就成了痛点。Grafana 的 Dashboard 变量可以解决这个问题。在最上层 Dashboard Settings 里新建一个变量比如$host查询类型选 Query数据源选 ZabbixQuery 用*通配符它就能列出所有主机。然后在每个面板的查询条件里用$host变量代替固定主机这样你在 Dashboard 顶部切换主机所有面板会联动更新效果非常直观。变量粒度可以做得更细用$app变量过滤应用集用$item变量选择具体监控项。我一般会建三个层级变量主机组 → 主机 → 监控项这样即使监控数量很大面板切换也不会卡。变量查询的底层实现其实是在调 Zabbix API如果你连数据源都通了变量基本不会出问题反而要留意主机数量过多时下拉框会很长可以按主机组先过滤一层。5.3 给面板加一层展示细节做给业务和管理层看的面板不用塞太多监控项选几个关键指标就够CPU、内存、磁盘、网络、服务存活状态。Grafana 的 Stat、Gauge 适合做当前值展示Time series 看趋势再加上 threshold 配置可以在面板上直接看到哪些指标超了阈值。颜色阈值配色建议简单直接绿、黄、红三档就够用不要五颜六色不然大屏上反而看不清楚。还有一个小技巧给每个面板设置No value时的显示内容避免某个监控项因为暂时没数据而显示空白影响观看。6. 上线之后那些文档里不会写的维护教训Grafana Zabbix 组合跑起来之后真正磨人的不是搭建而是后续维护。我把几个踩过的坑总结在这里希望你能直接绕过去。6.1 升级 Grafana 前先看插件兼容矩阵Grafana 升级频率不低而 Zabbix 插件的兼容性更新未必同步跟得上。我有一次把 Grafana 从 10.x 升到 11.xZabbix 数据源直接失效界面打开一片报错。查下来是插件版本太老不兼容新版 Grafana 的插件协议。升级前一定先去插件 GitHub 页面确认兼容矩阵再执行grafana-cli plugins update alexanderzobnin-zabbix-app升级完一定要重启 grafana-server 并重新测试数据源。为了降低升级风险我建议把 Grafana 和插件的版本组合固定下来不要每次弹更新提示就去点。生产环境里稳定比新鲜重要得多。真要升级先在一台测试服务器上验证面板加载和数据链路都没问题再动生产。6.2 API 专用账号的权限回收与轮换你给 Grafana 建的专用账号时间久了很容易被遗忘在 Zabbix 用户列表里。建议在账号备注里写清楚用途和创建时间比如Grafana 数据源只读账号2025年创建。如果团队换人或密码泄露及时在 Zabbix 侧改密码并同步更新 Grafana 数据源。Zabbix 7.0 还支持 API Token比密码更可控到期时间可以设置建议优先使用 Token 而不是密码即使 Token 泄露也能单独撤销而不影响其他登录方式。6.3 我最后保留的一套稳定组合经过几个项目的验证我这边最终固定下来的组合是Zabbix 7.0 LTS Grafana 10.4 alexanderzobnin-zabbix-app 4.4.x这套组合在功能、稳定性和插件兼容性上都比较平衡。如果你的团队用的还是 Zabbix 5.0/6.0也不需要为了接 Grafana 去升级 Zabbix插件本身兼容老版本 API反而要更留意 Grafana 端和插件端的版本搭配。关于连接报错还有一个小经验数据源测试失败但日志里没有任何异常时不妨看看 Grafana 服务器的系统时间是不是和 Zabbix 服务器差太多。时间不同步会导致 Token 校验失败表现也接近连接错误。这个坑不好排查但一旦遇到修正时间同步后问题立刻消失。把chronyc sources和 Zabbix 侧的时间输出对一下这是我在多次踩坑之后养成的检查习惯。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →