问题说明
访问 http://zabbixip/api_jsonrpc.php 出现 HTTP ERROR 412 ,同时网页解析失败,该地址为Zabbix的JSON-RPC API接口地址。
412 状态码含义
HTTP 412(前置条件失败):服务器未满足请求头中设置的前置条件,拒绝处理当前请求。
常见原因&排查方向
-
请求头缺失/异常
Zabbix API 要求携带合法请求头(如
Content-Type: application/json-rpc、认证相关头信息),直接用浏览器裸访问接口,缺少规范请求头,触发412报错。 -
Zabbix 服务端配置限制
- 接口开启了跨域、IP白名单限制,当前访问IP未被允许;
- Zabbix 前端/API 模块配置异常、服务未完全启动。
-
请求格式错误
该接口仅接收标准JSON-RPC格式的POST请求,浏览器默认GET请求不符合接口规范,也会触发报错。
简易解决建议
- 该地址并非可视化网页 ,是程序调用接口,不要用浏览器直接打开 ,需通过代码、接口测试工具(Postman、curl)以
POST + JSON格式调用。 - 调用时务必添加请求头:
Content-Type: application/json或application/json-rpc。 - 检查访问客户端IP是否在Zabbix服务器的访问白名单内。
- 确认Zabbix服务、Web服务(Nginx/Apache)运行正常。
一、前置说明
- 天蝎数据源 = alexanderzobnin/zabbix-app 官方Zabbix插件,是Grafana对接Zabbix标准数据源;
- 你访问
api_jsonrpc.php报412 Precondition Failed 核心根源:浏览器GET访问、缺少Content-Type: application/json请求头,Zabbix API只接收POST+标准JSON请求,浏览器直接打开必然412,不代表接口不可用; - Zabbix7.4 完全兼容该插件,无需修改Zabbix底层API逻辑。
二、第一步:Zabbix服务端前置检查(解决412关键)
1. 验证API可用性(用curl测试,排除服务端问题)
在Grafana服务器执行(替换你的Zabbix IP):
bash
curl -X POST -H "Content-Type: application/json" -d '{
"jsonrpc":"2.0",
"method":"apiinfo.version",
"id":1
}' http://zabbixip/api_jsonrpc.php
正常返回示例:
json
{"jsonrpc":"2.0","result":"7.4.0","id":1}
- 返回版本号=API正常,412只是浏览器访问限制;
- curl也412:检查Nginx/Apache、防火墙、Zabbix账号权限。
2. 创建Zabbix专用只读账号(最小权限)
- Zabbix前端 → 管理 → 用户 → 创建用户
- 用户名:
grafana_ro,设置密码 - 媒体随便填,不要勾选「禁用前端访问」(勾选会同步禁用API)
- 用户名:
- 用户权限:添加只读用户组,授予所有主机组、监控项、触发器只读权限;
- 禁止直接用Admin账号对接Grafana。
3. Web服务(Nginx)兼容配置(规避代理/跨域412)
若Zabbix用Nginx反向代理,在location ~ \.php$内添加头支持:
nginx
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# 关键:允许JSON请求头,解决API 412
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods POST,OPTIONS;
add_header Access-Control-Allow-Headers Content-Type;
}
重载nginx:nginx -s reload
4. 放行防火墙
bash
# firewalld示例
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
三、Grafana安装&启用天蝎Zabbix插件

1. 在线安装插件
bash
grafana-cli plugins install alexanderzobnin-zabbix-app
systemctl restart grafana-server
2. Grafana页面启用插件
- 左侧菜单 Connections → Plugins;
- 搜索
Zabbix,进入插件详情; - 点击 Enable 启用插件(必须启用才能添加数据源)。
四、添加Zabbix天蝎数据源(核心配置)

-
左侧 Connections → Data sources → Add data source ,选择
Zabbix; -
基础参数填写(重点):
| 配置项 | 填写说明 |
|--------|--------|
| Name | 自定义,如Zabbix7.4 |
| URL | 完整API地址:
http://zabbixip/api_jsonrpc.php子目录安装Zabbix则:
http://zabbixip/zabbix/api_jsonrpc.php|| Access | 固定选 Server(默认) (Grafana服务端转发请求,不能选Browser) |
| Username | 刚才创建的
grafana_ro|| Password | 对应账号密码 |
-
高级优化(Zabbix7.4必开)
- ✅ Enable trends:开启(长时间大盘聚合走趋势表,大幅提速)
- Trends from:填
24h(超过1天自动读取趋势数据) - Direct DB Connection(可选,性能更强)
- 先添加MySQL/PostgreSQL数据源,连接Zabbix数据库;
- 勾选Direct DB,选择数据库源,查询海量监控项不会卡顿。
- 底部点击 Save & test
- 出现两个绿色对勾:
✅ Zabbix API version:7.4.0
✅ Connected to Zabbix API
代表对接成功。
五、常见报错:访问api_jsonrpc.php HTTP 412彻底解决
原因1:浏览器用GET访问API(你当前问题)
Zabbix API强制要求:POST请求 + Content-Type:application/json
浏览器地址栏直接打开=GET,缺少请求头,服务器直接返回412,不代表接口故障,只用curl/Grafana插件POST调用即可正常。
原因2:Nginx/Apache拦截JSON请求头
按上文Nginx配置添加跨域Header,重载服务。
原因3:Zabbix用户勾选「禁用前端访问」
用户编辑页取消勾选,否则API同步拒绝连接。
原因4:Grafana数据源Access选错Browser
必须选Server模式,Browser模式前端发起请求会跨域+头缺失,持续412。
六、大盘使用简单示例
- 新建Dashboard → Add panel → 选择Zabbix;
- 数据源选择刚创建的Zabbix7.4;
- 筛选主机组、主机、监控项,即可绘制CPU、内存、磁盘监控曲线;
- 支持触发器告警、拓扑、监控项多维度聚合图表。
七、补充排错命令
- 查看Grafana数据源连接日志
bash
tail -f /var/log/grafana/grafana.log
- 本地测试API(排除网络拦截)
bash
curl -i -X POST -H "Content-Type:application/json" -d '{"jsonrpc":"2.0","method":"apiinfo.version","id":1}' http://127.0.0.1/api_jsonrpc.php
- 检查Zabbix php-fpm状态
bash
systemctl status php-fpm