目录
官方文档地址:https://www.zabbix.com/documentation/3.4/zh/manual

- 创建新的应用程序以使用Zabbix;
- 将Zabbix与第三方软件集成;
- 自动执行常规任务。
使用Zabbix API接口的要素

官方文档引用:
设置前端后,你就可以使用远程HTTP请求来调用API。为此,需要向 api_jsonrpc.php 位于前端目录中的文件发送HTTP POST请求。例如,如果你的Zabbix前端安装在 http://company.com/zabbix, 那么用HTTP请求来调用 apiinfo.version 方法就如下面这样:
POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc
{"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":null,"params":{}}
请求的 Content-Type 头部必须设置为以下值之一: application/json-rpc, application/json 或 application/jsonrequest。
你可以使用任何HTTP客户端或JSON-RPC测试工具手动执行API请求,但对于开发应用程序,我们建议使用 社区维护的程序库。
执行请求
-
接口请求地址:http://192.168.106.72/zabbix/api_jsonrpc.php
-
基于http协议向api_jsonrpc.php发送POST请求
-
伪装http请求的头部字段Content-Type 的值是以下三种之一:
application/jsonapplication/jsonrequestapplication/json-rpc
-
客户端和API之间的请求和响应使用JSON格式
python使用的模块
JSON模块(内置模块)
- 主要用于实现json格式的数据对应python中的数据类型转换
1、将字典转换成json格式
使用dumps方法
json.dumps(字典)

2、将json格式转换成字典
使用loads方法
json.loads(json数据)

request模块(第三方模块)
用来发送HTTP请求
安装模块:
PS E:\python_venv> pip install requests
- 常用方法:
- get请求获取数据
- post发起请求
get使用演示
import requests
result = requests.get("http://www.baidu.com")
#这里接收到的是访问地址返回的http的相应数据
print(result)
#只接收纯字符的结果
print(result.text)
#只接收状态码
print (result.status_code)

post使用
这里还是以百度为例,发送用户信息(由于是访问百度,会返回错误)
import requests
userinfo = {
"username":"admin","passwd":"test"}
result = requests.post(url="http://www.baidu.com", data=userinfo)
print(result)
#这里就可以用.text和.status_code方法,处理接受到的数据,返回码和字符结果
#print(result.text)

POST里可以以url指定地址,可以传递data(例子里使用data传递了一个字典),也可以是json格式的数据。还支持一个参数是headers,用来伪装http的请求头部

自动监控案例
案例一、在zabbix为主机添加一个监控项
(官方文档案例)
1、获取token

- 获取后,因为后边需要使用这个token,需要取出这个值


官方文档内容:
在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。让我们假设你想要以标准Zabbix Admin用户身份登录。然后,你的JSON请求将如下所示:
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}
让我们仔细看看请求对象。它具有以下属性:
jsonrpc- API使用的JSON-RPC协议的版本; Zabbix API实现JSON-RPC版本2.0;method- 调用的API方法;params- 将被传递给API方法的参数;id- 请求的任意标识符;auth-用户认证令牌; 因为我们还没有一个,它的设置null。
如果你正确提供了凭据,API返回的响应将包含用户身份验证令牌:
{ "jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1}
响应对象又包含以下属性:
jsonrpc- JSON-RPC协议的版本;result- 方法返回的数据;id- 相应请求的标识符。
2、获取主机ID

获得结果如下:
{“jsonrpc”:“2.0”,“result”:[{“hostid”:“10254”,“host”:“node1.song”,“interfaces”:[{“interfaceid”:“2”,“ip”:“192.168.106.73”}]},{“hostid”:“10084”,“host”:“Zabbix server”,“interfaces”:[{“interfaceid”:“1”,“ip”:“127.0.0.1”}]}],“id”:2}
其中包含了jsonrpc的版本号,和result中是主机的信息,ID是请求的ID。
整理格式大概是这样:
一个字典里包含了三个内容,其中result里是一个列表写了主机的信息。

通过这个结构可以清楚的获取里边的hostID和接口ID:
result = requests.post(url=zabbix_url,data=json.dumps(data),headers=head)
#取hostid,先用loads将结果转成字典,get获取字典里的result键对应的值(是个列表)取下标为0的(是第一个字典),再get键为hostid的。
hostid = json.loads(result.text).get("result")[0].get("hostid")
#取接口ID,先用loads将结果转成字典,get获取字典里的result键对应的值(是个列表)取下标为0的(是第一个字典),再get键为interfaces的值(是个列表)取下标为0,再get键为interfaceid。
interface_id = json

本文详细介绍了如何使用Zabbix API与Python结合进行自动化监控。首先,讲解了使用Zabbix API的基本要素,包括HTTP POST请求、JSON格式和Content-Type头部设置。接着,通过Python的requests模块展示了获取token、主机ID以及添加监控项的步骤。最后,提供了一个完整的案例,演示了如何自动添加新服务器到Zabbix监控,包括获取主机组ID、模板ID及创建主机的过程。案例代码清晰易懂,适用于Zabbix自动化运维场景。
最低0.47元/天 解锁文章
576

被折叠的 条评论
为什么被折叠?



