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

原文地址:https://www.cnblogs.com/abner123/p/13274877.html