-
通過zabbix提供的api進行維護模式的設置
#!/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到接口 print content 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到接口 print content 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 = 1 # 用戶ID username = 'admin' password = '123456' api_url = "http://192.168.1.100/api_jsonrpc.php" res = auth(1, 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及以下版本
需要修改uid、username、password、api_url以及res中的auth函數的uid值,通過修改period的值來修改維護時長。
該腳本通過platform模塊獲取到agent的主機名,確保server端的主機名與客戶端一致,且存在,否則設置不成功。
設置完成后可在Configuration->Maintenance頁面中查看設置的維護模板。
可以通過在Configuration->Hosts頁面中查看是否生效。