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
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Python调用Zabbix API批量查询主机的信息,您需要进行以下步骤: 1. 安装 `zabbix-api` 模块:您可以使用 `pip` 命令安装该模块,例如:`pip install zabbix-api` 2. 导入必要的库和模块: ```python from pyzabbix import ZabbixAPI import json ``` 3. 创建 `ZabbixAPI` 对象并登录: ```python zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() ``` 4. 使用 `host.get` 方法批量查询主机信息: ```python hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) ``` 此时,变量 `hosts` 将包含所有主机的信息。在这个示例中,我们查询了每个主机的 `hostid`、`host`、`name`、`status` 和 `ip` 信息。 5. 处理查询结果: ```python for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 以上代码将遍历每个主机,并打印出其 ID、名称、状态和 IP 地址。 完整代码示例: ```python from pyzabbix import ZabbixAPI import json zabbix_server = "http://zabbix.example.com" zabbix_user = "username" zabbix_password = "password" zapi = ZabbixAPI(url=zabbix_server, user=zabbix_user, password=zabbix_password) zapi.login() hosts = zapi.host.get(output=['hostid', 'host', 'name', 'status', 'ip']) for host in hosts: print("Host ID:", host['hostid']) print("Host Name:", host['name']) print("Host Status:", host['status']) print("Host IP:", host['ip']) print("------------------------") ``` 注意:在实际使用中,您可能需要根据具体情况修改查询的参数和返回结果的处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值