0

0

Zabbix如何通过API上传XML模板

煙雲

煙雲

发布时间:2026-02-13 00:55:32

|

584人浏览过

|

来源于php中文网

原创

zabbix api configuration.import 必须传 base64 编码的 xml 字符串并指定 format="xml",且 xml 中引用的主机组、模板等必须已存在,否则报错或静默失败。

zabbix如何通过api上传xml模板

zabbix_api.py 调用 configuration.import 时返回 “Invalid params”

直接传 XML 字符串或文件路径都会失败,因为 Zabbix API 的 configuration.import 方法不接受原始 XML 文本或本地路径,它只认 Base64 编码后的字符串 + 明确指定的 format 参数。常见错误是把 xml 当成格式名传进去,实际必须用 xml 对应的合法值:xml(没错,字面就是 "xml",但大小写敏感且不能加空格)。

  • 确保 XML 内容已读取为字符串,并用 base64.b64encode(...).decode("utf-8") 编码(Python)或等效方式(如 JS 的 btoa
  • format 字段必须是字符串 "xml",不是 "XML""Xml""xml_file"
  • 请求体中不要包含 rules 字段除非你明确需要覆盖行为;默认规则已足够导入模板

Python 脚本上传模板时提示 “No permissions to referred object or it does not exist”

这个错误和权限无关,大概率是 host_grouptemplate 在 XML 中引用了 Zabbix 里不存在的组名或模板名。Zabbix 导入时会校验 <groups></groups><templates></templates> 下的 <name></name> 是否已在当前实例中存在。

花生AI
花生AI

B站推出的AI视频创作工具

下载
  • 检查 XML 模板里的 <groups><group><name>Linux servers</name></group></groups> —— 这个 Linux servers 必须已在 Zabbix 前端或通过 API 创建好
  • 如果模板依赖其他模板(如继承自 Template OS Linux),确保目标 Zabbix 实例中已存在该模板,且名称完全一致(区分大小写)
  • 临时解决办法:编辑 XML,删掉整个 <groups></groups> 节点,或把 <groups></groups> 留空;导入后再手动关联主机组
import base64
import requests

url = "https://zabbix.example.com/zabbix/api_jsonrpc.php"
auth_token = "your_auth_token_here"

with open("template_linux_custom.xml", "rb") as f:
    xml_content = f.read()

encoded_xml = base64.b64encode(xml_content).decode("utf-8")

payload = {
    "jsonrpc": "2.0",
    "method": "configuration.import",
    "params": {
        "format": "xml",
        "source": encoded_xml,
        "rules": {
            "templates": {"createMissing": True},
            "applications": {"createMissing": True},
            "items": {"createMissing": True, "updateExisting": True},
            "triggers": {"createMissing": True, "updateExisting": True},
            "graphs": {"createMissing": True, "updateExisting": True}
        }
    },
    "auth": auth_token,
    "id": 1
}

response = requests.post(url, json=payload, verify=False)
print(response.json())

curl 命令行导入 XML 模板总卡在 400 错误

curl 直接 POST XML 文件容易忽略两个关键点:一是 JSON payload 中 source 必须是 Base64 字符串(不能是 @file),二是 Content-Type 必须为 application/json,否则 Zabbix 返回 400 且无有效提示。

  • 先用 base64 -i template.xml | tr -d '\n' 得到单行 Base64 字符串(macOS 用 base64 -i,Linux 用 base64 -w0
  • 拼 JSON 时确保 source 值用双引号包裹,且不含换行 —— 否则 JSON 解析失败
  • 别漏掉 -H "Content-Type: application/json",这是 curl 默认不带的

导入后模板没出现在“Configuration → Templates”列表里

不是失败,而是模板被导入但处于“未启用”状态,或者被自动归类到“Templates created by user”这类隐藏分组。Zabbix Web UI 默认不显示未启用模板,也不在所有分组中默认展开。

  • 登录 Zabbix 前端,在“Configuration → Templates”右上角点“Filter”,勾选 “Show disabled templates”
  • 检查 XML 中是否含 <status>1</status>(1 表示禁用,0 表示启用);若为 1,导入后需手动启用,或改 XML 后重传
  • API 导入不会触发模板自动链接到主机,必须后续调用 template.link 或在前端手动操作
XML 模板导入真正卡点不在编码或认证,而在引用关系的提前对齐——主机组、依赖模板、甚至监控项里的 hostid(如果 XML 里硬编码了 ID)都可能让导入静默失败或半成功。动手前先用 zabbix_get 或 API 查一遍目标环境里已有哪些组和模板,比反复试错快得多。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

436

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

865

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

445

2024.06.27

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1927

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2100

2024.08.01

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

4

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号