二次开发:API调用
一、API介绍
Zabbix
提供了一个丰富的API
,Zabbix
提供的API有2
种功能。
一个是管理
一个是查询
请求方法 POST
我们可以进行访问查看
无法打开,我们需要进行POST
请求才可以。
官方说明文档:https://www.zabbix.com/documentation/3.0/manual/api
1
2
3
4
5
6
7
8
9
10
|
curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc" : "2.0" , "method" : "user.login" , "params" : { "user" : "zhangsan" , "password" : "123456" }, "id" : 1 }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool |
-d
请求的内容 -H
类型 id
名字,类似一个标识 user
我们登陆用的是zhangsan 默认是Admin password
默认是zabbix,我们修改为123456了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@linux-node1 ~] # curl -s -X POST -H 'Content-Type:application/json-rpc' -d' > { > "jsonrpc" : "2.0" , > "method" : "user.login" , > "params" : { > "user" : "zhangsan" , > "password" : "123456" > }, > "id" : 1 > }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool --------------------------分割线------------------------ 下面是返回的结果!!!!!!!!!!!!!!!!!!!!!! { "id" : 1, "jsonrpc" : "2.0" , "result" : "d8286f586348b96b6b0f880db3db8a02" } |
例如:我们获取所有主机的列表
官方文档:https://www.zabbix.com/documentation/3.0/manual/api/reference/host/get
1
2
3
4
5
6
7
8
9
10
|
curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc" : "2.0" , "method" : "host.get" , "params" : { "output" : [ "host" ] }, "auth" : "d8286f586348b96b6b0f880db3db8a02" , "id" : 1 }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool |
提示: auth里面填写的是我们刚刚返回的result
里面的值,如果我们在["hostid"]
加上id就会显示id。想全显示主机名就直接写host
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
|
[root@linux-node1 ~] # curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc" : "2.0" , "method" : "host.get" , "params" : { "output" : [ "host" ] }, "auth" : "d8286f586348b96b6b0f880db3db8a02" , "id" : 1 }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool { "id" : 1, "jsonrpc" : "2.0" , "result" : [ { "host" : "Zabbix server" , "hostid" : "10084" }, { "host" : "linux-node1.example.com" , "hostid" : "10105" }, { "host" : "linux-node1.example.com1" , "hostid" : "10107" }, { "host" : "linux-node2.example.com" , "hostid" : "10117" } ] } |
对比图
例如:如何获取模板
官方文档:https://www.zabbix.com/documentation/3.0/manual/api/reference/template/get
1
2
3
4
5
6
7
8
9
10
|
curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc" : "2.0" , "method" : "template.get" , "params" : { "output" : "extend" }, "auth" : "d8286f586348b96b6b0f880db3db8a02" , "id" : 1 }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool |
默认太多不发了,看图!
过滤
过滤主机有OS LINUX
的模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc" : "2.0" , "method" : "template.get" , "params" : { "output" : "extend" , "filter" : { "host" : [ "Template OS Linux" ] } }, "auth" : "d8286f586348b96b6b0f880db3db8a02" , "id" : 1 }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool |
效果图如下!
我们提供一个快速认证的Python
脚本
链接:http://pan.baidu.com/s/1gf0pQwF 密码:m7dq
脚本内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
[root@linux-node1 ~] # cat zabbix_auth.py #!/usr/bin/env python # -*- coding:utf-8 -*- import requests import json url = 'http://192.168.56.11/zabbix/api_jsonrpc.php' post_data = { "jsonrpc" : "2.0" , "method" : "user.login" , "params" : { "user" : "zhangsan" , "password" : "123123" }, "id" : 1 } post_header = { 'Content-Type' : 'application/json' } ret = requests.post(url, data=json.dumps(post_data), headers=post_header) zabbix_ret = json.loads(ret.text) if not zabbix_ret.has_key( 'result' ): print 'login error' else : print zabbix_ret.get( 'result' ) |
我们可以执行一下进行查看
提示: 需要修改里面的用户名
和密码
!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#安装python环境 [root@linux-node1 ~] # yum install python-pip -y [root@linux-node1 ~] # pip install requests You are using pip version 7.1.0, however version 8.1.2 is available. You should consider upgrading via the 'pip install --upgrade pip' command . Collecting requests Downloading requests-2.11.1-py2.py3-none-any.whl (514kB) 100% |████████████████████████████████| 516kB 204kB /s Installing collected packages: requests Successfully installed requests-2.11.1 ################################################ ################################################ ################################################ 执行结果 [root@linux-node1 ~] # python zabbix_auth.py 5b21317186f2a47404214556c5c1d846 |
二、案例:使用API进行自动添加主机
首先我们需要删除主机和自动发现
我们使用API来实现自动添加监控主机
使用API添加主机:https://www.zabbix.com/documentation/3.0/manual/api/reference/host/create
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
|
curl -s -X POST -H 'Content-Type:application/json-rpc' -d' { "jsonrpc" : "2.0" , "method" : "host.create" , "params" : { "host" : "Zabbix agent 192" , "interfaces" : [ { "type" : 1, "main" : 1, "useip" : 1, "ip" : "192.168.56.12" , "dns" : "" , "port" : "10050" } ], "groups" : [ { "groupid" : "8" } ], "templates" : [ { "templateid" : "10001" } ] }, "auth" : "5b21317186f2a47404214556c5c1d846" , "id" : 1 }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool |
用户组ID获取方法
模板IP查看方法
执行结果如下:
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
|
[root@linux-node1 ~] # curl -s -X POST -H 'Content-Type:application/json-rpc' -d' > { > "jsonrpc" : "2.0" , > "method" : "host.create" , > "params" : { > "host" : "Zabbix agent 192" , > "interfaces" : [ > { > "type" : 1, > "main" : 1, > "useip" : 1, > "ip" : "192.168.56.12" , > "dns" : "" , > "port" : "10050" > } > ], > "groups" : [ > { > "groupid" : "8" > } > ], > "templates" : [ > { > "templateid" : "10001" > } > ] > }, > "auth" : "5b21317186f2a47404214556c5c1d846" , > "id" : 1 > }' http: //192 .168.56.11 /zabbix/api_jsonrpc .php | python -m json.tool { "id" : 1, "jsonrpc" : "2.0" , "result" : { "hostids" : [ "10118" ] } } |
查看Zabbix 页面
提示: 里面的主机名/模板 都是我们设置好的
Zabbix完!