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监控是否正常:

  • 相关阅读:
    【Intellij】Intellij Idea 2017创建web项目及tomcat部署实战
    【IntelliJ 】IntelliJ IDEA 15 创建maven项目
    【IntelliJ】IntelliJ IDEA的安装破解及使用
    maven坐标查询
    【PowerDesigner】PowerDesigner之CDM、PDM、SQL之间转换
    【c3p0】 C3P0的三种配置方式以及基本配置项详解
    LinkedHashMap和HashMap的比较使用
    【全局变量】mysql查看全局变量以及设置全局变量的值
    Redis总结
    Java高概率面试题目—finally
  • 原文地址:https://www.cnblogs.com/abner123/p/13274877.html
Copyright © 2011-2022 走看看