关于python调用zabbix api接口的自动化实例 [结合saltstack]

简介:

前言:

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


请大家多关注下我的独立博客,更多的关于zabbix二次开发的话题,http://xiaorui.cc


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

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

https://www.zabbix.com/documentation/1.8/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


原文: http://rfyiamcool.blog.51cto.com/1030776/1358792

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

啥时候用?

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

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


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


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



相关文章
|
5天前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
104 60
|
4天前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
30 10
|
21天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
67 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
|
8天前
|
JSON 安全 API
淘宝商品详情API接口(item get pro接口概述)
淘宝商品详情API接口旨在帮助开发者获取淘宝商品的详细信息,包括商品标题、描述、价格、库存、销量、评价等。这些信息对于电商企业而言具有极高的价值,可用于商品信息展示、市场分析、价格比较等多种应用场景。
|
17天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
17天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
49 7
|
16天前
|
前端开发 API 数据库
Next 编写接口api
Next 编写接口api
|
22天前
|
XML JSON 缓存
阿里巴巴商品详情数据接口(alibaba.item_get) 丨阿里巴巴 API 实时接口指南
阿里巴巴商品详情数据接口(alibaba.item_get)允许商家通过API获取商品的详细信息,包括标题、描述、价格、销量、评价等。主要参数为商品ID(num_iid),支持多种返回数据格式,如json、xml等,便于开发者根据需求选择。使用前需注册并获得App Key与App Secret,注意遵守使用规范。
|
21天前
|
JSON API 开发者
淘宝买家秀数据接口(taobao.item_review_show)丨淘宝 API 实时接口指南
淘宝买家秀数据接口(taobao.item_review_show)可获取买家上传的图片、视频、评论等“买家秀”内容,为潜在买家提供真实参考,帮助商家优化产品和营销策略。使用前需注册开发者账号,构建请求URL并发送GET请求,解析响应数据。调用时需遵守平台规定,保护用户隐私,确保内容真实性。
|
21天前
|
搜索推荐 数据挖掘 API
淘宝天猫商品评论数据接口丨淘宝 API 实时接口指南
淘宝天猫商品评论数据接口(Taobao.item_review)提供全面的评论信息,包括文字、图片、视频评论、评分、追评等,支持实时更新和高效筛选。用户可基于此接口进行数据分析,支持情感分析、用户画像构建等,同时确保数据使用的合规性和安全性。使用步骤包括注册开发者账号、创建应用获取 API 密钥、发送 API 请求并解析返回数据。适用于电商商家、市场分析人员和消费者。