zoukankan      html  css  js  c++  java
  • python调用zbbix的api实现批量添加域名监控脚本

    一、这里分成了三个文件,一个是主文件:zbxHttp.py ,一个是zbbix相关登录信息文件:zbxHttp_settings.py ,一个需要监控域名的列表文件:url_file (三个配置文件需要都放在一个目录下面)

    1、主配置文件:

    vim  zbxHttp.py 

    #!/usr/bin/env python
    # Version = zabbix 4.2
    
    import json
    from urllib import request, parse
    import zbxHttp_settings
    
    
    url = "{}/api_jsonrpc.php".format(zbxHttp_settings.ZABBIX_URL)
    header = {"Content-Type": "application/json"}
    
    
    def ZbxAuth():
        print(zbxHttp_settings.ZABBIX_URL,zbxHttp_settings.ZABBIX_USERNAME)
    
        data = {
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {
                "user": zbxHttp_settings.ZABBIX_USERNAME,
                "password": zbxHttp_settings.ZABBIX_PASSWORD
            },
            "id": 1,
        }
    
        value = json.dumps(data).encode('utf-8')
        req = request.Request(url, headers=header, data=value)
    
        try:
            result = request.urlopen(req)
        except Exception as e:
            print("Auth Failed, Please Check Your Name And Password:", e)
        else:
            response = result.read()
            page = response.decode('utf-8')
            page = json.loads(page)
            result.close()
            status_list = str(page.get('result'))
            return status_list
    
    def ZbxGetHost():
        data={
                "jsonrpc": "2.0",
                "method": "host.get",
                "params": {
                    "output": [
                        "hostid",
                        "host"
                    ],
                    "selectInterfaces": [
                        "interfaceid",
                        "ip"
                    ]
                },
                "id": 1,
                "auth": token,
            }
    
        value = json.dumps(data).encode('utf-8')
    
        req = request.Request(url, headers=header, data=value)
        try:
            result = request.urlopen(req)
        except Exception as e:
            print("Auth Failed, Please Check Your Name And Password:", e)
        else:
            response = result.read()
            page = response.decode('utf-8')
            page = json.loads(page)
            for hostid in page['result']:
                zbxHttp_settings.HOSTID_LIST.append(hostid['hostid'])
                zbxHttp_settings.HOSTNAME_LIST.append(hostid['host'])
            result.close()
            status_list=str(page.get('result'))
    
    
    def ZbxCreateHttp():
        """添加http监控"""
        with open(zbxHttp_settings.INPUT_FILE, 'r', encoding="utf-8") as file:
            count = 1
            for domain in file.readlines():
                web_name = domain.split("//")[1]
                web_url = domain.split()[0]
                print(web_name, web_name)
                for host_id in zbxHttp_settings.HOSTID_LIST:
                    print("web检测--域名:%s,URL:%s"%(web_name,web_url))
                    data = {
                        "jsonrpc": "2.0",
                        "method": "httptest.create",
                        "params": {
                            "name": "%s" % (web_name),
                            "agent": zbxHttp_settings.CLIENT_AGENT,
                            "hostid": host_id,
                            # "applicationid": "1308",
                            "delay": zbxHttp_settings.UPDATE_TIME,
                            "retries": zbxHttp_settings.TRY_NUMBER,
                            "steps": [
                                {
                                    "name": "%s" % (web_name),
                                    "url": "%s" % (web_url),
                                    "status_codes": zbxHttp_settings.STATUS_CODE,
                                    "timeout": zbxHttp_settings.TIMEOUT,
                                    "no": count
                                }
                            ]
                        },
                        "auth": token,
                        "id": 1
                    }
    
                    value = json.dumps(data).encode('utf-8')
                    req = request.Request(url, headers=header, data=value)
                    try:
                        result = request.urlopen(req)
                    except Exception as e:
                        print("Auth Failed, Please Check Your Name And Password:", e)
                    else:
                        response = result.read()
                        page = response.decode('utf-8')
                        page = json.loads(page)
                        print(page)
                        result.close()
                        status_list = str(page.get('result'))
                        print(status_list)
    
    def ZbxCreateTrigger():
        """添加触发器"""
        with open(zbxHttp_settings.INPUT_FILE, 'r', encoding="utf-8") as file:
            count = 0
            for domain in file.readlines():
                web_name = domain.split("//")[1]
                web_url = domain.split()[0]
                print(web_name, web_name)
                for host in zbxHttp_settings.HOSTNAME_LIST:
                    print("触发器-域名:%s,URL:%s"%(web_name,web_url))
                    data = {
                        "jsonrpc": "2.0",
                        "method": "trigger.create",
                        "params": [
                            {
                                "description": "%s" % (web_name),
                                "expression": "{%s:web.test.rspcode[%s,%s].last()}<>200 or {%s:web.test.fail[%s].last()}<>0"% (host,web_name,web_name,host,web_name),
                                "priority": zbxHttp_settings.PRIORITY,
                            }
                        ],
                        "auth": token,
                        "id": 1
                    }
                    value = json.dumps(data).encode('utf-8')
                    req = request.Request(url, headers=header, data=value)
                    try:
                        result = request.urlopen(req)
                    except Exception as e:
                        print("Auth Failed, Please Check Your Name And Password:", e)
                    else:
                        response = result.read()
                        page = response.decode('utf-8')
                        page = json.loads(page)
                        print(page)
                        result.close()
                        status_list = str(page.get('result'))
                        print(status_list)
    
    
    def main():
        if zbxHttp_settings.HOSTID_LIST and zbxHttp_settings.HOSTNAME_LIST:
            ZbxCreateHttp()
            ZbxCreateTrigger()
        else:
            ZbxGetHost()
            ZbxCreateHttp()
            ZbxCreateTrigger()
    
    if __name__ == "__main__":
        token=ZbxAuth()
        print(token)
        main()

    2、zbxHttp_settings.py

    #!/usr/bin/env python
    # Version = zabbix 4.2
    
    #域名文件名称,同脚本目录下
    INPUT_FILE= "url_file"
    
    ZABBIX_URL = 'http://127.0.0.1:8080/zabbix'
    
    ZABBIX_USERNAME="Admin"
    
    ZABBIX_PASSWORD="zabbix"
    
    #默认为所有服务器添加《hostid》,如果需要选择性添加,以[,]区分多个,例如: hostid_list = ['10084']
    HOSTID_LIST=[]
    
    #默认为所有服务器添加《主机名称》,如果需要选择性添加,以[,]区分多个,例如: host_list=['Zabbix server']
    HOSTNAME_LIST=[]
    
    #更新间隔时间(秒)
    UPDATE_TIME="30"
    
    # 尝试次数(次)
    TRY_NUMBER="2"
    
    # 模拟客户端
    CLIENT_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36"
    
    # 要求状态码多个[,]
    STATUS_CODE="200"
    
    # 访问超时时间(秒)
    TIMEOUT="15"
    
    #严重性级别  0 未分类  1信息  2警告  3一般严重  4严重  5灾难
    PRIORITY="4"

     3、你需要监控的URL的地址列表文件

    url_file

    例如:https://www.baidu.com

    ............... 需要监控的在这个文件里面添加好

    注意:zbxHttp_settings.py文件中根据自己zbbix相关登录信息进行修改,修改完成后使用Python3进行运行即可;

     添加完成后:如图查看相关web监控是否正常:

  • 相关阅读:
    spring mvc给参数起别名
    聊聊分布式定时任务中间件架构及其实现--转
    Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
    终端安全工具 gartner 排名
    When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结很有用 看未来演进方向
    DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网
    DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp
    DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat
    Data Mining and Machine Learning in Cybersecurity PDF
    ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
  • 原文地址:https://www.cnblogs.com/abner123/p/13274877.html
Copyright © 2011-2022 走看看