zabbix 优势在于其丰富的api功能,可以高度定制化、扩展。笔者也是在使用了1年的API中收获颇丰。在cmdb资产管理功能、微信操作控制zabbix功能、获取zabbix数据制作报表等都利用到了zabbix api。
笔者把脚本脚本分为三个部分
1.登陆脚本 login.py
2.定义函数脚本 function.py
3.调用执行脚本 zabbix.py
登陆脚本 login.py
#!/usr/bin/env python import urllib2 import json #定义URL账户密码 url = 'http://zabbixip/zabbix/api_jsonrpc.php' username = 'admin' password = 'password' #定义通过HTTP方式访问API地址的函数,后面每次请求API的各个方法都会调用这个函数 def requestJson(url,values): data = json.dumps(values) req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'}) response = urllib2.urlopen(req, data) output = json.loads(response.read()) # print output try: message = output['result'] except: message = output['error']['data'] print message quit() return output['result'] #API接口认证的函数,登录成功会返回一个Token def authenticate(url, username, password): values = {'jsonrpc': '2.0', 'method': 'user.login', 'params': { 'user': username, 'password': password }, 'id': '0' } idvalue = requestJson(url,values) return idvalue
定义函数脚本 function.py
#!/usr/bin/env python #coding=utf-8 import urllib2 import sys import json import argparse from login import * from function import * #登陆zabbix获取auth auth = authenticate(url, username, password) #状态0是启用监控,1是禁用监控 status=1 #定义操作ip hostip='192.168.1.100' #通过hostip获取zabbix hostid hostids=ipgetHostsid(hostip,url,auth) hostid=hostids[0]['hostid'] #通过主机id开启关闭监控 idupdatehost(status,hostid,url,auth)
添加维护周期(maintenance.py)
#!/usr/bin/env python #coding=utf-8 import urllib2 import sys import json import argparse import time from login import * from function import * def timetostamp(strtime): timeArrary = time.strptime(strtime, "%Y-%m-%d %H:%M") return int(time.mktime(timeArrary)) ''' if __name__ == '__main__': __name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。 这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。 在你import别的py文件时,那个py文件会被存一份pyc加速下次装载。而主文件因为只需要装载一次就没有存pyc ''' #登陆zabbix获取auth auth = authenticate(url, username, password) hostip='10.10.10.10' groupname='Zabbix Agent' #通过hostip获取zabbix hostid hostids=ipgetHostsid(hostip,url,auth) hostid=hostids[0]['hostid'] #通过groupname获取zabbix groupid groupids=groupnameGroupid(groupname,auth) groupid=groupids[0]['groupid'] # 名称,描述,注意name不能重复 name='Zabbix Agent group更新维护' desc = "这是一次全服更新维护,请悉知!" # 维护时间 dt_since = '2018-01-18 11:25' dt_till = '2018-01-18 13:25' active_since = timetostamp(dt_since) active_till = timetostamp(dt_till) # 开始生效时间 dt_start = '2018-01-18 12:30' start_date = timetostamp(dt_start) # 持续时间,单位秒 period = 600 print 'period=%ds' % period if __name__ == '__main__': maintenancecreate(name,active_since,active_till,desc,hostid,start_date,period,auth) maintenancecreategroup(name,active_since,active_till,desc,groupid,start_date,period,auth)