Zabbix Web API Get方法整合
#!/usr/bin/python3
import requests,json,re,time,datetimeurl = 'http://xxx.com/api_jsonrpc.php'headers = {"Content-Type":"application/json", 'User-Agent': 'Godaner.com python-requests'} #设置请求头username = 'username' #用户名password = 'passwd' #密码def get_token(): #获取认证token,token有效时间为zabbix用户配置的自动退出时间 data = { "jsonrpc": "2.0", "method": "user.login", "params": { "user": username, "password": password }, "id": 0 } try: resp = requests.post(url=url, headers=headers, data=json.dumps(data)) token = json.loads(resp.text)['result'] #resp.close() except: return 'F' return token#示例获取token token = get_token()print(token)f24008481e287qc1e931e6598c041od6def get_host(token,ip2host=""): if ip2host: selectItems = "selectItems" selectTriggers = "selectTriggers" else: selectItems = "" selectTriggers = "" if re.search('[a-z]', ip2host): arg = 'host' else: arg = 'ip' #获取单个或者所有zabbix主机信息,ip2host(IP,主机名)为空获取所有主机信息 #获取所有主机的时候将不输出对应主机的监控项和触发器信息。(大量主机) data = { "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["hostid","name","status","available"], #返回: [主机id,主机名,主机状态(0监控中|1未监控),主机的可用性(0可用|1不可用)] selectItems: ["itemid","key_","name","value_type","status","lastclock","lastvalue"], #返回此主机的监控项信息:[id,key,名称,数据类型,可用性(0 启用|1 禁用),上次取值时间,最后一次的值] #特别注意value_type,这个参数是创建监控项时,选择的返回值数据类型。当获取不到item值的时候,要注意此值: #0 浮点数;1 字符串;2 日志;3 整数 默认值;4 文本长字符串 selectTriggers: ["expression","priority","status","value"], #返回此主机的触发器信息:[触发器表达式,严重级别(0-5),可用性(0 启用|1 禁用),触发器状态(0 正常|1 问题)] "selectGroups": ["groupid","name"], #返回此主机所在组:[组id,组名] "selectInterfaces": ["interfaceid","ip","port"], #返回此主机连接信息:[网卡id,ip地址,端口] "selectParentTemplates": ["templateid","name"], #返回此主机连接的模板信息:[模板id,模板名] "filter": { arg: ip2host, }, #过滤,这个跟上面的逻辑对应,这里过滤ip或者主机名,只在ip2host参数有值时生效 }, "id": 0, "auth": token, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取所有主机和单个主机,单个主机的时候返回监控项和触发器信息hosts = get_host(token) #获取所有主机信息print(json.dumps(hosts, indent=4, ensure_ascii=False))[ { "status": "0", "name": "xxxxxxxxxx", "hostid": "14700", "available": "1", "parentTemplates": [ { "templateid": "12601", "name": "Agent_SH" }, { "templateid": "13025", "name": "Template_Apps" } ], "interfaces": [ { "interfaceid": "4771", "ip": "xx.xx.xx.xx", "port": "10050" } ], "groups": [ { "name": "Discovered hosts", "groupid": "5" }, { "name": "OS_CentOS", "groupid": "15" } ], }, { "status": "0", "name": "xxxxxxxxxx", "hostid": "14701", "available": "1", "parentTemplates": [ { "templateid": "12601", "name": "Agent_SH" }, { "templateid": "13025", "name": "Template_Apps" } ], "interfaces": [ { "interfaceid": "4834", "ip": "xx.xx.xx.xx", "port": "10050" } ], "groups": [ { "name": "Discovered hosts", "groupid": "5" }, { "name": "OS_CentOS", "groupid": "15" } ], }, ······]host = get_host(token,ip2host='x.x.x.x') #获取单个主机信息,带项目和触发器信息print(json.dumps(host, indent=4, ensure_ascii=False))[ { "interfaces": [ { "ip": "x.x.x.x", "interfaceid": "1", "port": "10050" } ], "name": "Godaner", "items": [ { "name": "check iptables", "lastvalue": "it's ok", "key_": "fwcheck", "value_type": "4", "itemid": "23833", "lastclock": "1554515244", "status": "0" }, { "name": "login", "lastvalue": "Apr 5 16:43:37 Godaner sshd[24987]: Accepted password for ····", "key_": "log[/var/log/secure,\"Accepted password\",,,skip,]", "value_type": "2", "itemid": "23767", "lastclock": "1554453825", "status": "0" }, ······ ], "triggers": [ { "value": "0", "status": "0", "priority": "5", "expression": "{13220}=0 and {13221}=0", "triggerid": "13614" }, { "value": "0", "status": "0", "priority": "4", "expression": "{13299}>1", "triggerid": "13616" }, ······ ], "hostid": "10084", "groups": [ { "name": "testgroup", "groupid": "4" } ], "available": "1", "status": "0" }]def get_trigger_bad(token,hostid=""): if not hostid: arg = "" else: arg = "hostids" #获取问题触发器,hostid为空时,获取所有问题触发器 data = { "jsonrpc": "2.0", "method": "trigger.get", "params": { arg: hostid, "only_true": 1, #只返回最近处于问题状态的触发器 "active": 1, #只返回启用的触发器 #"skipDependent":1, #在依赖于其他触发器的问题状态中跳过触发器 "monitored":1, #只返回所属被监控主机启用触发器,且包含已启用的监控项(跳过监控项不可用的问题触发器) "output": ["priority","status","value","description"], #输出: [严重级别|(启用|禁用)|(正常|问题)|触发器名称] "selectHosts": ["name"],#返回host,id #"selectItems": ["name"],#返回item,id "sortfield": "priority",#以严重级别排序 "sortorder": "DESC", #降序 "filter": { "value": 1, #过滤问题触发器 } }, "id": 0, "auth": token, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取当前所有问题触发器trigger_bad = get_trigger_bad(token)print(json.dumps(trigger_bad, indent=4, ensure_ascii=False))[ { "description": "Filesystems: 可用磁盘空间少于 5% --> /usr", "hosts": [ { "hostid": "13382", "name": "x.x.x.x" } ], "priority": "2", "value": "1", "triggerid": "77341", "status": "0" }, { "description": "zombie on {HOST.NAME}", "hosts": [ { "hostid": "11820", "name": "x.x.x.x" } ], "priority": "1", "value": "1", "triggerid": "63834", "status": "0" }, ······ ]def get_groups(token): #获取所有组信息,输出组id,组名 data = { "jsonrpc": "2.0", "method": "hostgroup.get", "params": { "output": ["groupid","name"], }, "auth": token, "id": 0, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取所有组groups = get_groups(token)print(json.dumps(groups, indent=4, ensure_ascii=False))[ { "name": "SH", "groupid": "49" }, { "name": "HK", "groupid": "4" }, ······]def get_group_hosts(token, groupid): #获取指定组id里的所有主机,输出主机名跟id data = { "jsonrpc": "2.0", "method": "host.get", "params": { "groupids": groupid, "output": ["host","hostid"], }, "auth": token, "id": 0, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取指定组里所有主机hosts = get_group_hosts(token,groupid='xxx')print(json.dumps(hosts, indent=4, ensure_ascii=False))[ { "host": "web.zabbix", "hostid": "13247" }, { "host": "db.zabbix", "hostid": "14045" }, ······]def get_items(token, hostid, key=""): #获取指定主机所有监控项,也可指定key名称获取。 if re.search('[a-z]', key): arg = "key_" else: arg = "itemid" data = { 'jsonrpc': '2.0', 'method': "item.get", "params": { "output": ["itemid","key_","name","value_type","status","lastclock","lastvalue"], #输出信息跟上面的get_host里的selectItems一样 "hostids": hostid, "filter":{ arg: key, }, }, 'auth': token, 'id': 0, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取单个主机所有监控项itemids = get_items(token,hostid='xxxx')print(json.dumps(itemids, indent=4, ensure_ascii=False))[ { "lastclock": "1554514630", "value_type": "3", "key_": "vm.memory.size[total]", "name": "Total memory", "itemid": "23830", "lastvalue": "17180569600", "status": "0" }, { "lastclock": "1554517503", "value_type": "3", "key_": "webcheck", "name": "check www.godaner.com", "itemid": "23832", "lastvalue": "200", "status": "0" }, ······]def get_history(token, itemid, limit="10", stime="", etime="", vtp="3"): #get_history(token=get_token(),itemid='23809')返回指定监控项23809最近10条数据 #如果没有值,注意vtp,默认是整数型的,比如要取cpu load的值,就要用vtp=0 if not etime: etime = time.time() #不指定结束时间,结束之间为当前时间,也可指定时间段查询,单位为时间戳 data = { "jsonrpc": "2.0", "method": "history.get", "params": { "output": "extend", #输出所有 "history": vtp, #值存储的数据类型 "itemids": itemid, #itemid "sortfield": "clock", #以时间排序 "sortorder": "DESC", #倒序 "limit": limit, #返回数据的条数 "time_from": stime, #返回在给定时间时或之后收到的值 "time_till": etime, #返回在给定时间时或之前收到的值 }, "auth": token, "id": 0, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取单个item最近10次的历史记录,也可指定某个时间段,此例为默认history = get_history(token,itemid='23832')print(json.dumps(history, indent=4, ensure_ascii=False))[ { "itemid": "23832", "ns": "670291350", "clock": "1554516780", "value": "200" }, { "itemid": "23832", "ns": "41115479", "clock": "1554516660", "value": "502" }, ······]def get_events(token,tfrom): #某个时间之后,由问题触发器产生的事件 data = { "jsonrpc": "2.0", "method": "event.get", "params": { "output": ["eventid","clock","value"], #返回:[事件id,事件, #"value这个值是相关对象状态,这个值可能来自于触发器,可能是自动发现,还有可能是内部事件,记住1是问题就行"] #"time_from": time.mktime((datetime.datetime.now() - datetime.timedelta(days=1)).timetuple()), "time_from": tfrom, #返回这个时间戳之后的事件 "selectHosts": ["name"], #返回这个事件是哪个主机产生的 "selectRelatedObject": ["triggerid","description"], #返回这个事件是哪个对象产生的,如果是触发器的话返回[触发器id,触发器名称] "sortfield": ["clock"], #以时间排序 "sortorder": "desc", #倒序 "filter": { #过滤 "source": "0", #0 触发器,1 自动发现,2 自动注册,3内部事件 "object": "0", #0,1,2,3 同上,0就是触发器事件 "value": "1", #0 正常事件,1 故障事件 } }, "auth": token, "id": 0, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取某个时间之后,所有由问题触发器产生的事件events = get_events(token,tfrom='1554315660')print(json.dumps(events, indent=4, ensure_ascii=False))[ { "eventid": "10375", "hosts": [ { "name": "Godaner", "hostid": "10084" } ], "clock": "1554374074", "relatedObject": { "triggerid": "13654", "description": "check www.godaner.com" }, "value": "1" }, { "eventid": "10376", "hosts": [ { "name": "Godaner", "hostid": "10084" } ], "clock": "1554374194", "relatedObject": { "triggerid": "13654", "description": "check www.godaner.com" }, "value": "1" }, ······]def get_alerts(token,tfrom): #获取报警信息 data = { "jsonrpc": "2.0", "method": "alert.get", "params": { "output": ["eventid","subject","clock","esc_step"], #输出:[事件id,报警主题,报警时间, #警次次数,这个报警次数是针对单事件的,多事件报警这个值永远为1。多事件就是在创建触发器那里有个多事件选择 #这个值就可以很好的判断 这个报警持续了多久 重要哦] "time_from": tfrom, #返回这个时间戳之后的报警,上面这个是1天(24小时)前的时间戳 "selectHosts": ["name"], #返回报警主机的主机名 "sortfield": ["clock"], #以时间排序 "sortorder": "desc", #倒序 }, "auth": token, "id": 0, } resp = requests.post(url=url, headers=headers, data=json.dumps(data)) return json.loads(resp.text)['result']#示例 获取24小时内报警信息tt = time.mktime((datetime.datetime.now() - datetime.timedelta(days=3)).timetuple())alerts = get_alerts(token,tfrom=tt)print(json.dumps(alerts, indent=4, ensure_ascii=False))[ { "clock": "1554374317", "esc_step": "3", "subject": "Godaner: check www.godaner.com", "hosts": [ { "hostid": "10084", "name": "Godaner" } ], "eventid": "10376", "alertid": "10129" }, { "clock": "1554374317", "esc_step": "3", "subject": "Godaner: check www.godaner.com", "hosts": [ { "hostid": "10084", "name": "Godaner" } ], "eventid": "10376", "alertid": "10130" }, ······]Zabbix Web API Get方法整合的更多相关文章
- zabbix调用api检索方法
环境 zabbix:172.16.128.16:zabbix_web:172.16.16.16/zabbix 用户名:Admin 密码:zabbix 获取的数据仅做参考,以Linux发送HTTP的PO ...
- 基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
我前面几篇随笔介绍了关于几篇关于SqlSugar的基础封装,已经可以直接应用在Winform项目开发上,并且基础接口也通过了单元测试,同时测试通过了一些Winform功能页面:本篇随笔继续深化应用开发 ...
- 我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)
前言 你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和前端进行接口对接?那么这篇文章应该可以帮到你.本文将介绍创建Web Api 帮助文档页面的两种方式,Microsoft Help ...
- Web API返回JSON数据
对Web API新手来说,不要忽略了ApiController 在web API中,方法的返回值如果是实体的话实际上是自动返回JSON数据的例如: 他的返回值就是这样的: { "Conten ...
- Web API WinForm使用HttpClient呼叫Web API
前言 之前几篇文章已经介绍了 Web 与 Web API 的使用方式,接下来将介绍如何在 Windows Form 呼叫 Web API 的方法,要在 WinForm 中使用 Web API 的话,除 ...
- WebApi系列~通过HttpClient来调用Web Api接口
回到目录 HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api ...
- Web API应用架构设计分析(1)
Web API 是一种应用接口框架,它能够构建HTTP服务以支撑更广泛的客户端(包括浏览器,手机和平板电脑等移动设备)的框架, ASP.NET Web API 是一种用于在 .NET Framewor ...
- Web Api 中Get 和 Post 请求的多种情况分析
转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...
- ASP.NET Web API 学习【转】
转自:http://www.cnblogs.com/babycool/p/3922738.html 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理. 这里我使用J ...
随机推荐
- 3.ansible-iventory的写法和基本变量
ansible的配置文件一点要多考虑,有些设定比如ssh端口啊用户啊线程啊都尽量在里面调节好iventory的话/etc/ansible/hosts 里面可以使用正则匹配ansible从invento ...
- 轻量级浏览器Midori
导读 这是一个对再次回归的轻量级.快速.开源的 Web 浏览器 Midori 的快速回顾. 如果你正在寻找一款轻量级网络浏览器替代品,请试试 Midori. Midori是一款开源的网络浏览器,它更注 ...
- Go语言类型(布尔、整型、数组、切片、map等)
1.基本类型 布尔类型:bool 注意:布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换. 整型:int8.byte(uint8).int16.int.uint.uintptr int.ui ...
- 基本排序算法[python实现]
冒泡排序 原理 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...
- C# 电脑上提示未知发布者
参考6楼:http://tieba.baidu.com/p/5767451198?pid=120504172126&cid=120504203560#120504203560 解决方案:mak ...
- Elasticsearch 中数据类型 text 与 keyword 的区别
随着ElasticSearch 5.X 系列的到来, 同时也迎来了该版本的重大特性之一: 移除了string类型. 这个变动的根本原因是string类型会给我们带来很多困惑: 因为ElasticSea ...
- MS-DOS 6.22 +Vim+masm 汇编环境
安装vim 个人习惯用 vim 编辑,因此稍微折腾了一下.不用这么麻烦直接用 edit 编辑也是可以的. 原来安装的 MS-DOS 7.10 虚拟机安装好vim后无法运行,所以改用了 MS-DOS 6 ...
- 「UVA10766」Organising the Organisation(生成树计数)
BUPT 2017 Summer Training (for 16) #6C 题意 n个点,完全图减去m条边,求生成树个数. 题解 注意可能会给重边. 然后就是生成树计数了. 代码 #include ...
- Linux服务器定时健康检查,发生故障自动微信告警
此脚本适用于于各种Linux环境,可以实现各种监控项目,可自定义阀值,实现不同监控效果已在原有脚本基础上做了简化,提取了主要功能目前实现的有:1.磁盘监控2.内存监控3.cpu负荷监控4.进程数监控5 ...
- python3 字典dict
字典是用大括号{}表示 dict() 键必须是唯一的,但值则不必:键是不可变的,如字符串.数字.元组,值可以取任意数据类型: 可以迭代, del可以删除一对键值,del Dict['key'] 重复给 ...