Python:调用zabbix api,删除部分被监控主机
调用zabbix api,删除部分被监控主机。
简介
当新主机上线时,我们可以通过自动注册功能,在zabbix中批量添加这些新主机。那当有主机需要下线时,我们又该如何在zabbix中批量删除这些主机呢?我们可以使用python编写脚本, 通过调用zabbix api的方式,实现被监控主机的批量删除功能。这个脚本虽然简单,但同时涉及python和zabbix api的基础操作,很适合初学者将理论知识落地成为实践,通过理论实践相结合的方法,让我们能快速成长。
代码部分
# -*- coding: utf-8 -*-
import json
from urllib import request
# 从配置文件中读取配置信息
def get_conf_info(conf):
with open(conf) as f:
conf_info = json.load(f)
return conf_info
# 从文件中读取主机名到列表中
def get_hostname_lst(hostname_file):
with open(hostname_file) as f:
ss = f.readlines()
ss = [ i.strip() for i in ss ]
return ss
# 调用zabbix api
class call_zbxapi:
def __init__(self,url):
self.url = url
self.idx = 0
self.auth = None
self.hostid_lst = []
# 发送request请求,执行相关指令
def send_request(self,method,params):
headers = {"Content-Type": "application/json-rpc"}
data = {
"jsonrpc": "2.0",
"method": method,
"id": self.idx,
"auth": self.auth,
"params": params
}
req = request.Request(self.url,headers=headers,data=json.dumps(data).encode("UTF-8"))
with request.urlopen(req) as res:
res = res.read()
ret = json.loads(res)
if "result" in ret:
result = ret["result"]
return result
self.idx += 1
# 获取认证token
def login(self,user,password):
method = "user.login"
params = {
"user": user,
"password": password,
}
self.auth = self.send_request(method,params)
# 退出登录
def logout(self):
method = "user.logout"
params = []
self.send_request(method,params)
# 通过主机名获取主机id,host_lst为由主机名组成的列表,输出由主机id组成的列表。
def get_hostid_lst(self,hostname_file):
method = "host.get"
params = {
"output": ["hostid"],
"filter": {
"host": hostname_file
}
}
result = self.send_request(method,params)
self.hostid_lst = [ i["hostid"].strip() for i in result ]
# 删除hostid_lst中的主机
def del_host(self):
method = "host.delete"
params = self.hostid_lst
self.send_request(method,params)
def main():
# 获得相关配置信息
conf = "config.json"
conf_info = get_conf_info(conf)
url = conf_info["api"]["url"]
user = conf_info["api"]["user"]
password = conf_info["api"]["password"]
# 获得待删除的主机名称
hostname_file = "namefile.txt"
hostname_lst = get_hostname_lst(hostname_file)
# 调用zbx api,通过主机名称获得主机id,再按照主机id删除主机
zbxapi_caller = call_zbxapi(url)
zbxapi_caller.login(user,password)
zbxapi_caller.get_hostid_lst(hostname_lst)
zbxapi_caller.del_host()
zbxapi_caller.logout()
if __name__ == "__main__":
main()
配置文件
config.json
[root@redis del_zbxhosts]# cat config.json
{
"api": {
"url": "http://192.168.1.10/zabbix/api_jsonrpc.php",
"user": "Admin",
"password": "zabbix"
}
}
namefile.txt
[root@redis del_zbxhosts]# cat namefile.txt
redis1
redis2
redis3
原文地址:https://blog.csdn.net/weixin_39027047/article/details/139870986
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!