前言
前段时间,运维生存时间群里有一位兄弟咨询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及以下版本
文章转载来自:ttlsa.com