- A+
所属分类:zabbix
前言
前段时间,运维生存时间群里有一位兄弟咨询API操作,由于时间忙,给了一份写好的zabbix维护脚本给他参考,脚本里面包含用户登录或者token、获取主机信息、创建维护模式。有python脚本功力的同学直接看脚本。
脚本功能
zabbix_maintenance.py 执行本脚本,zabbix将此服务器置为维护状态,周期为10分钟。本脚本只需要修改zabbix用户ID、用户名、密码、网址即可
备注:zabbix中的hostname必须与当前主机名一致
API脚本
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
#!/usr/bin/env python # -*-coding:utf-8-*- import urllib import urllib2 import json import sys import platform import time def auth(uid, username, password, api_url): """ zabbix认证 :param uid: :param username: :param password: :return: """ dict_data = {} dict_data['method'] = 'user.login' # 方法 dict_data['id'] = uid # 用户id dict_data['jsonrpc'] = "2.0" # api版本 dict_data['params'] = {"user": username, "password": password} # 用户账号密码 jdata = json.dumps(dict_data) # 格式化json数据 content = post_data(jdata, api_url) # post json到接口 return content # 返回信息 def post_data(jdata, url): """ POST方法 :param jdata: :param url: :return: """ req = urllib2.Request(url, jdata, {'Content-Type': 'application/json'}) response = urllib2.urlopen(req) # content = response.read() content = json.load(response) return content def create_maintenance(name, hostid, active_since, active_till, period, auth_code, api_url): """ create maintenance :return: """ dict_data = {} dict_data['method'] = 'maintenance.create' # 方法 dict_data['id'] = uid # 用户id dict_data['jsonrpc'] = "2.0" # api版本 dict_data['auth'] = auth_code # api版本 dict_data['description'] = "UPDATE" + hostid # api版本 # host hostids = [hostid] # timeperiods timeperiods = [{"timeperiod_type": 0, "start_time": 64800, "period": period}] dict_data['params'] = {"name": name, "active_since": active_since, "timeperiods": timeperiods, "active_till": active_till, "hostids": hostids} # 用户账号密码 jdata = json.dumps(dict_data) # 格式化json数据 content = post_data(jdata, api_url) # post json到接口 return content # 返回信息 def get_hostid(hostname, auth_code, uid, api_url): """ use hostname get hostid :param hostname: :param auth: :param uid: :return: """ dict_data = {} dict_data['method'] = 'host.getobjects' # 方法 dict_data['id'] = uid # 用户id dict_data['jsonrpc'] = "2.0" # api版本 dict_data['params'] = {"name": hostname} # 主机名 dict_data['auth'] = auth_code # auth串 jdata = json.dumps(dict_data) # 格式化json数据 content = post_data(jdata, api_url) # post json到接口 return content # 返回信息 def logout(uid, auth_code, api_url): """ 退出 :param uid: :param auth_code: :return: """ dict_data = {} dict_data['method'] = 'user.logout' # 方法 dict_data['id'] = uid # 用户id dict_data['jsonrpc'] = "2.0" # api版本 dict_data['params'] = [] dict_data['auth'] = auth_code # auth串 jdata = json.dumps(dict_data) # 格式化json数据 content = post_data(jdata, api_url) # post json到接口 return content # 返回信息 if __name__ == '__main__': # user info uid = 5 # 用户ID username = 'zabbix用户名' password = 'zabbix密码' api_url = "http://zabbix网址/zabbix/api_jsonrpc.php" res = auth(5, username, password, api_url) # 认证 if res['result']: auth_code = res['result'] # 认证串 hostname = platform.node() # 主机名 res = get_hostid(hostname, auth_code, uid, api_url) if res['result']: period = 600 # 维护时长 active_since = int(time.time()) # 开始时间 active_till = int(time.time()) + period # 结束时间 hostid = res['result'][0]['hostid'] # 主机 res = create_maintenance('AutoMaintenance_' + hostname + '_' + str(active_since), hostid, active_since, active_till, period, auth_code, api_url) # 创建维护 logout(uid, auth_code, api_url) # 退出登录 print res else: pass |
备注:以上脚本适用于zabbix2.4及以下版本
如有相关问题,大家有如下问题可以咨询凉白开或者SA们:加入QQ群(看网站底部)、关注微信公众号ttlsacom提问、发送邮件至suppor@ttlsa.com、在本文里留言!

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
24/10/2016 下午 1:50 沙发
手工赞一个
09/10/2015 下午 1:46 板凳
赞
来自外部的引用: 1