Python调用zabbix的api接口

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

官方文档地址: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/jsonapplication/jsonrequest

你可以使用任何HTTP客户端或JSON-RPC测试工具手动执行API请求,但对于开发应用程序,我们建议使用 社区维护的程序库

执行请求


  • 接口请求地址:http://192.168.106.72/zabbix/api_jsonrpc.php

  • 基于http协议向api_jsonrpc.php发送POST请求

  • 伪装http请求的头部字段Content-Type 的值是以下三种之一:

    • application/json
    • application/jsonrequest
    • application/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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值