博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于python调用zabbix api接口的自动化实例 [结合saltstack]
阅读量:5786 次
发布时间:2019-06-18

本文共 3754 字,大约阅读时间需要 12 分钟。

前言:

   这两天一直做一个叫集群配置管理平台的自动化项目,写了有20多天了,项目做的还算顺利,只是一堆的接口需要写,有点烦。因为clusterops项目到最后肯定是要和监控平台做结合的,这两天也抽时间看了下。   以前自己也写过不少类似zabbix的接口调用教程,当时看的时候,由于时间有限,也都是草草跑demo。


请大家多关注下我的独立博客,更多的关于zabbix二次开发的话题,


       zabbix的接口挺好理解,任何的程序都可以写,甚至是linux的curl命令。我这边用python的urllib、urllib2来搞的,当然会php的就更好了,因为zabbix的接口是php写的,懂php可以直接用现成的。

zabbix官网有大量的接口,你只要会用zabbix,然后看下api的说明,应该就没啥问题了

简单说三个例子,入个门。

      获取KEY

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
!/usr/bin/env python2.
7
#coding=utf-
8
import 
json
import 
urllib2
# based url and required header
url = 
"http://monitor.example.com/api_jsonrpc.php"
header = {
"Content-Type"
"application/json"
}
# auth user and password
data = json.dumps(
{
    
"jsonrpc"
"2.0"
,
    
"method"
"user.login"
,
    
"params"
: {
    
"user"
"Admin"
,
    
"password"
"zabbix"
},
"id"
0
})
# create request object
request = urllib2.Request(url,data)
for 
key 
in 
header:
    
request.add_header(key,header[key])
# auth and 
get 
authid
try
:
    
result = urllib2.urlopen(request)
except URLError 
as 
e:
    
print 
"Auth Failed, Please Check Your Name And Password:"
,e.code
else
:
    
response = json.loads(result.read())
    
result.close()
    
print 
"Auth Successful. The Auth ID Is:"
,response[
'result'
]

   获取hostlist

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
#!/usr/bin/env python2.
7
#coding=utf-
8
import 
json
import 
urllib2
#xiaorui.cc
url = 
"http://10.10.10.61/api_jsonrpc.php"
header = {
"Content-Type"
"application/json"
}
# request json
data = json.dumps(
{
    
"jsonrpc"
:
"2.0"
,
    
"method"
:
"host.get"
,
    
"params"
:{
        
"output"
:[
"hostid"
,
"name"
],
        
"filter"
:{
"host"
:
""
}
    
},
    
"auth"
:
"dbcd2bd8abc0f0320fffab34c6d749d3"
,
    
"id"
:
1
,
})
# create request object
request = urllib2.Request(url,data)
for 
key 
in 
header:
    
request.add_header(key,header[key])
get 
host list
try
:
    
result = urllib2.urlopen(request)
except URLError 
as 
e:
    
if 
hasattr(e, 
'reason'
):
        
print 
'We failed to reach a server.'
        
print 
'Reason: '
, e.reason
    
elif hasattr(e, 
'code'
):
        
print 
'The server could not fulfill the request.'
        
print 
'Error code: '
, e.code
else
:
    
response = json.loads(result.read())
    
result.close()
    
print 
"Number Of Hosts: "
, len(response[
'result'
])
    
for 
host 
in 
response[
'result'
]:
        
print 
"Host ID:"
,host[
'hostid'
],
"Host Name:"
,host[
'name'
]

添加主机

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
#!/usr/bin/env python2.
7
#coding=utf-
8
import 
json
import 
urllib2
#xiaorui.cc
url = 
"http://10.10.10.61/api_jsonrpc.php"
header = {
"Content-Type"
"application/json"
}
# request json
data = json.dumps(
{
    
"jsonrpc"
:
"2.0"
,
    
"method"
:
"host.create"
,
    
"params"
:{
        
"host"
"10.10.10.67"
,
"interfaces"
:
        
[{
"type"
1
,
"main"
1
,
"useip"
1
,
"ip"
"10.10.10.67"
,
"dns"
""
,
"port"
"10050"
}],
        
"groups"
: [{
"groupid"
"2"
}],
"templates"
: [{
"templateid"
"10087"
}]
        
},
    
"auth"
:
"dbcd2bd8abc0f0320fffab34c6d749d3"
,
    
"id"
:
1
,
}
)
# create request object
request = urllib2.Request(url,data)
for 
key 
in 
header:
    
request.add_header(key,header[key])
get 
host list
try
:
    
result = urllib2.urlopen(request)
except URLError 
as 
e:
    
if 
hasattr(e, 
'reason'
):
        
print 
'We failed to reach a server.'
        
print 
'Reason: '
, e.reason
    
elif hasattr(e, 
'code'
):
        
print 
'The server could not fulfill the request.'
        
print 
'Error code: '
, e.code
else
:
    
response = json.loads(result.read())
    
result.close()
    
print 
'ok'
zai

原文: 

我个人觉得zabbix的rest api难点在于key相关的认证,会了之后,再看官网的api文档就一目了然了。

啥时候用?

在我的集群平台下,我可以把暂时下线的服务器,在平台上去除,但是大家有没有想到,你要是吧主机删掉后,监控端会有一堆的通知发给你,所以,在处理主机的时候,顺便调用zabbix的接口,把该主机的监控项目给删掉。

    在我通过saltstack添加lvs后端主机的时候,我也同样可以调用接口,把后端的主机相应的监控都给加进去。


就先这样,有时间再丰富下该文章。

 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1358792,如需转载请自行联系原作者

你可能感兴趣的文章
Javascript[2] - prototype
查看>>
关于cpu
查看>>
安装windows10通用教程(数据无价,操作需谨慎)
查看>>
从点击Button到弹出一个MessageBox, 背后发生了什么
查看>>
微信小程序开发工具 常用快捷键
查看>>
P1005 矩阵取数游戏
查看>>
C++播放wav音乐和音效
查看>>
【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版...
查看>>
SpringMVC使用注解配置bean
查看>>
BZOJ1202 [HNOI2005]狡猾的商人
查看>>
改变Silverlight插件的下载url
查看>>
BZOJ 2002 LCT板子题
查看>>
python - 接口自动化测试 - contants - 常量封装
查看>>
asp.net easyui 动态绑定下拉框
查看>>
“小程序”初探
查看>>
angularjs结合plupload实现文件上传
查看>>
招商银行的企业网银如何完成银企对账
查看>>
windows下的进程注入
查看>>
抽象工厂,工厂方法和简单工厂的对比
查看>>
Zookeeper
查看>>