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

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

前言:

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

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

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

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

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

      获取KEY

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

   获取hostlist

#!/usr/bin/env python2.7#coding=utf-8import jsonimport urllib2#xiaorui.ccurl = "http://10.10.10.61/api_jsonrpc.php"header = {"Content-Type": "application/json"}# request jsondata = json.dumps({    "jsonrpc":"2.0",    "method":"host.get",    "params":{        "output":["hostid","name"],        "filter":{"host":""}    },    "auth":"dbcd2bd8abc0f0320fffab34c6d749d3",    "id":1,})# create request objectrequest = urllib2.Request(url,data)for key in header:    request.add_header(key,header[key])# get host listtry:    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.codeelse:    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']

添加主机

#!/usr/bin/env python2.7#coding=utf-8import jsonimport urllib2#xiaorui.ccurl = "http://10.10.10.61/api_jsonrpc.php"header = {"Content-Type": "application/json"}# request jsondata = 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 objectrequest = urllib2.Request(url,data)for key in header:    request.add_header(key,header[key])# get host listtry:    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.codeelse:    response = json.loads(result.read())    result.close()    print 'ok'zai

原文:

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

啥时候用?

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

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

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

转载地址:http://tgrwa.baihongyu.com/

你可能感兴趣的文章
HDU5037 Frog
查看>>
程序集冲突问题
查看>>
LeetCode 766. Toeplitz Matrix
查看>>
Java序列化反序列化对象流ObjectInputStream、ObjectOutputStream
查看>>
Spring与Mybatis的整合
查看>>
WinForm 弹框确认后执行
查看>>
Linux面试题
查看>>
! [rejected] master -> master (non-fast-forward)
查看>>
STL unique
查看>>
装饰自己的博客园界面
查看>>
django-返回客户端外网ip服务
查看>>
linux内核初始化控制流
查看>>
A Wasserstein Distance[贪心/模拟]
查看>>
推荐几个比较好的网站
查看>>
Project Euler 45 Triangular, pentagonal, and hexagonal( 二分 + 函数指针 )
查看>>
为什么成员属性不会被重写
查看>>
SQL Server, Cannot resolve the collation conflict
查看>>
VIM技巧:选择文本块
查看>>
10分钟了解JSON Web令牌(JWT)
查看>>
Python 函数
查看>>