Fork me on GitHub

Zabbix系列之《Python操作ZabbixAPI了解一下》

前言,本文讲解Zabbix API的使用及经验技巧。

一、Zabbix API介绍

Zabbix api为批量操作,第三方软件集成以及其他可编程的操作提供可编程接口。所有的zabbix的移动客户端都是基于api开发的,甚至原生的web前端也是基于他之上的。它允许你通过json RPC协议来创建,获取,更新zabbix的对象,当然了你可以通过它做任何你想做的操作。

zabbix API提供的主要的功能

  • 远程管理zabbix的配置;
  • 远程检索配置和历史信息。

API的请求

Zabbix 采用的是Json-RPC实现的。这也就是说,zabbix请求和响应都是Json类型,传的参数的类型也应该是Json类型。

二、API请求方式

Zabbix API是通过api_jsonrpc.php文件来接收一个HTTP POST请求进行执行指令的,例如,你安装好的Zabbix地址为:http://you_ip/zabbix,那么请求方式如下:

1
2
3
4
5
# 请求头部为:
{"Content-Type": "application/json-rpc"}

# 请求的URL为:
http://you_ip/zabbix/api_jsonrpc.php

三、用法案例

接下来以Python调用API为例,进行演示。

3.1、测试连接是否成功

1
2
3
4
5
6
7
import requests
import json
url = "http://172.16.194.128/zabbix/api_jsonrpc.php"
header = {"Content-Type": "application/json-rpc"}
data = {"jsonrpc":"2.0","method":"apiinfo.version","id":1,"auth":None,"params":{}}
request = requests.post(url=url, headers=header, data=json.dumps(data))
print request.content

上面的data用来测试是否可连接成功,官方文档中auth的值为null,但在python中null用None表示,所以需要改成None。

成功后返回值如下,会显示zabbix版本

1
{"jsonrpc":"2.0","result":"3.4.9","id":1}

3.2、获取Token

1
2
3
4
5
6
7
import requests
import json
url = "http://172.16.194.128/zabbix/api_jsonrpc.php"
header = {"Content-Type": "application/json-rpc"}
data = {"jsonrpc": "2.0","method": "user.login","params": {"user": "Admin","password": "zabbix"},"id": 1,"auth": None}
request = requests.post(url=url, headers=header, data=json.dumps(data))
print request.content

执行成功后返回值如下:result字段就是Token,你可以拿着它去zabbix系统里干你想干的事情!

1
{"jsonrpc":"2.0","result":"9fc0b8d5508a4d18ac34279ddce78667","id":1}

3.3、获取所有主机信息

这里使用一个完整的Python脚本通过API来获取;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/python
#coding:utf:8

import requests
import json

class Zabbix:
def __init__(self, url, header, username, password):
self.url = url
self.header = header
self.username = username
self.password = password

def getToken(self):
#获取Token并返回字符Token字符串
data = {"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": self.username,
"password": self.password
},
"id": 1,
"auth": None
}
token = requests.post(url=self.url, headers=self.header, data=json.dumps(data))
return json.loads(token.content)["result"]

def getAllHost(self):
#获取所有主机信息
data = {"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host",
],
"selectGroups": "extend",
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": self.getToken()
}
hosts = requests.post(url=self.url, headers=self.header, data=json.dumps(data))
return json.loads(hosts.content)["result"]


if __name__ == "__main__":
header = {"Content-Type": "application/json-rpc"}
url="http://172.16.194.128/zabbix/api_jsonrpc.php"
test = Zabbix(url=url, header=header, username="Admin", password="zabbix")
print(test.getAllHost())

通过以上的学习相信大家对Zabbix API已经有一个初步的认识,后面将会通过API去完成主机的自动添加,自动化报表等使用

-------------本文结束感谢您的阅读-------------