0%

zabbix_api

可通过点击zabbix页面中的Help按钮打开官方文档。本篇以2.2版本为例,列举出常用的操作。由于不同操作只是post不同数据而已,因此仅提供post的json串。

查阅zabbix api,最大的困惑莫过于数据格式Type。难搞懂的有3个:

array翻译为简单数组,以[]包裹;

object翻译为组合数组,一般以{}包裹;

query可理解为可填入特定值的arrayquery的值只能是特定列表中的几个,视对象的不同而不同,值为extend表示返回对象所有内容,某些对象还支持count值。

token

获取token

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
# -*- coding: utf-8 -*-

import requests
import json


def do_request(formdata):
url = 'http://www.myzabbix.com/api_jsonrpc.php'
h = {
'Content-Type': 'application/json-rpc'
}
try:
r = requests.post(url, data=json.dumps(formdata), timeout=3, headers=h)
return r.text
except Exception:
return ''


formdata = {
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "xxxx",
"password": "xxxxxx",
},
"id": 1
}

response = do_request(formdata)
print(response)

运行结果:

1
{"jsonrpc":"2.0","result":"0424bd5xxxxxxxxxxxxxxxxxxxxxxxxx","id":1}

result中的32位串即为后续验证使用的token。

每次运行会获取到一个新的token,同时在有效期内的老token可以继续使用

token的过期

在web页面Profile - User - Auto-logout中配置自动登出,这个时间也是token的过期时间。如果不勾选,则会永久有效。

token

验证token

将上例代码中的formdata修改以下内容,测试auth token。

1
2
3
4
5
6
7
{
"jsonrpc": "2.0",
"method": "apiinfo.version",
"params": [],
"id": 1,
"auth": "0424bd5xxxxxxxxxxxxxxxxxxxxxxxxx"
}

输出结果

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

host

host.get

默认输出所有hostid,params定义想要的输出。

过滤特定hostid

1
2
3
4
5
6
7
8
9
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"hostids": "3777"
},
"id": 2,
"auth": "xxx"
}

响应:

1
2
3
4
5
6
7
{
"jsonrpc": "2.0",
"result": [{
"hostid": "3777"
}],
"id": 2
}

使用filter过滤特定hostid

1
2
3
4
5
6
7
8
9
10
11
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"filter": {
"hostid": "3777"
}
},
"id": 2,
"auth": "xxx"
}

响应:

1
2
3
4
5
6
7
{
"jsonrpc": "2.0",
"result": [{
"hostid": "3777"
}],
"id": 2
}

使用search过滤特定Host name

1
2
3
4
5
6
7
8
9
10
11
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"search": {
"host": "xxxx"
}
},
"id": 2,
"auth": "xxx"
}

响应:

1
2
3
4
5
6
7
{
"jsonrpc": "2.0",
"result": [{
"hostid": "3777"
}],
"id": 2
}

输出更多额外信息

查看host.getapi文档,添加名称为selectXXX的参数。需要获取host本身的信息,如available等,应使用host.getobjects方法。

1
2
3
4
5
6
7
8
9
10
11
12
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"hostids": "3777",
"selectGroups": ["name"],
"selectParentTemplates": ["templateid", "host"],
"selectInterfaces": "extend"
},
"id": 2,
"auth": "xxx"
}

响应:

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
{
"jsonrpc": "2.0",
"result": [{
"interfaces": [{
"interfaceid": "3523",
"hostid": "3777",
"ip": "xxxx",
"useip": "1",
"dns": "",
"main": "1",
"type": "1",
"port": "10050"
}],
"hostid": "3777",
"parentTemplates": [{
"host": "Template xxx",
"templateid": "125"
}],
"groups": [{
"groupid": "63",
"name": "xxx"
}, {
"groupid": "79",
"name": "xxx"
}]
}],
"id": 2
}

添加"selectItems": "extend"参数,可以获取到所有所有监控项数据。

host.getobjects

输出更多本身信息

1
2
3
4
5
6
7
8
9
{
"jsonrpc": "2.0",
"method": "host.getobjects",
"params": {
"hostid": "3777"
},
"id": 2,
"auth": "xxxx"
}

响应:

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
{
"jsonrpc": "2.0",
"result": [{
"available": "1",
"maintenance_type": "0",
"maintenances": [],
"ipmi_username": "",
"snmp_disable_until": "0",
"ipmi_authtype": "0",
"ipmi_disable_until": "0",
"lastaccess": "0",
"snmp_error": "",
"ipmi_privilege": "2",
"jmx_error": "",
"jmx_available": "0",
"ipmi_errors_from": "0",
"maintenanceid": "0",
"snmp_available": "0",
"status": "0",
"host": "localhost",
"disable_until": "0",
"ipmi_password": "",
"templateid": "0",
"ipmi_available": "0",
"maintenance_status": "0",
"snmp_errors_from": "0",
"ipmi_error": "",
"proxy_hostid": "0",
"hostid": "3777",
"name": "web_www_1",
"jmx_errors_from": "0",
"jmx_disable_until": "0",
"flags": "0",
"error": "",
"maintenance_from": "0",
"errors_from": "0"
}],
"id": 2
}