使用python 对zabbix web监控的一些小操作

创建web监控

#! /usr/bin/env python3
import os
import json
import requests
from GetZabbixToken import GetToken, headers, urls, hostname


def OpenFile():
    createList = []
    FileLocal = os.path.join(os.path.dirname(__file__), 'zabbix.txt')
    with open(FileLocal, mode='r', encoding='utf-8') as zabbix:
        txt = zabbix.read()
    data = txt.rstrip().split('\n')
    for item in data:
        item2 = item.split('----')
        name = item2[0]
        hostid = item2[1]
        appid = item2[2]
        value = item2[3]
        tupleList = (name, hostid, appid, value)
        createList.append(tupleList)
    return createList


# 创建web监控
def CreateWebCheck(*args):
    for value in args:
        payload = {
            "jsonrpc": "2.0",
            "method": "httptest.create",
            "params": {
                "name": value[0],
                "hostid": value[1],
                "applicationid": value[2],
                "steps": [
                    {
                        "name": value[0],
                        "url": value[3],
                        "status_codes": "200",
                        "no": 1
                    }
                ]
            },
            "id": 1,
            "auth": GetToken()
        }
    response = requests.request("POST", urls, json=payload, headers=headers)
    print(response.text)


# 创建触发器
def CreateTriggerPort(*args):
    for value in args:
        payload = {
            "jsonrpc": "2.0",
            "method": "trigger.create",
            "params": [
                {
                    # 触发器描述
                    "description": f"访问{value[0]}接口错误!!",
                    # 报警触发器表达式
                    "expression": "{%s:web.test.rspcode[%s,%s].last(,5)}<>200" % (hostname, value[0], value[0]),
                    "url": value[2],
                    "priority": 5,
                    "comments": f"访问{value[0]}接口错误!! \n访问地址:{value[2]}",
                    # 启用恢复表达式
                    "recovery_mode": 1,
                    # 恢复触发器表达式
                    "recovery_expression": "{%s:web.test.rspcode[%s,%s].last(,5)}=200" % (hostname, value[0], value[0])
                }
            ],
            "id": 1,
            "auth": GetToken()
        }
    response = requests.request("POST", urls, json=payload, headers=headers)
    print(json.loads(response.text))


def main():
    tupleList = OpenFile()
    for value in tupleList:
        try:
            CreateWebCheck(value)
            CreateTriggerPort(value)
        except Exception as e:
            print(f"Error {e}")


if __name__ == "__main__":
    main()

可以看到我们从其他Python文件中引了一些东西,GetZabbixToken.py 文件就直接放在下面做参考了
GetZabbixToken.py

#! /usr/bin/env python3
import json
import requests

urls = 'http://192.168.1.110/zabbix/api_jsonrpc.php'
user = "Admin"
password = "zabbix"
hostname = "Zabbix server"
parms = {
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": user,
        "password": password
    },
    "id": 1
}

headers = {
    "Content-Type": "application/jsonrequest",
    "content-type": "application/json"
}


def GetToken():
    """使用python的requests模块调用zabbix API接口"""
    req = requests.get(urls, headers=headers, data=json.dumps(parms))
    key = req.text
    dic = json.loads(key)
    token = dic['result']
    # print("Zabbix api token of %s is: " % (user), token)
    return token


if __name__ == '__main__':
    GetToken()

zabbix.txt

# 简单的一个示范
百度----你的主机id----0(应用集id,没有默认为0)----https://www.baidu.com

获取web监控列表

有时想迁移zabbix莫个主机的web监控,看它太多有嫌麻烦不想一个一个的复制迁移的话,直接用脚本将它已有的web监控写入文本,在用脚本添加到主机里面就好了

#! /usr/bin/env python3

import requests
from GetZabbixToken import GetToken, headers, urls


def GetWebCheck(host_id):
    """"""
    payload = {
        "jsonrpc": "2.0",
        "method": "httptest.get",
        "params": {
            "output": "extend",
            "selectSteps": "extend",
            "hostids": host_id
        },
        "auth": GetToken(),
        "id": 1
    }
    response = requests.request("POST", urls, json=payload, headers=headers)
    # 获取为dict类型
    rjson = response.json()
    rlist = rjson["result"]
    # 是个list包含多个web监控dict
    for dictvalue in rlist:
        name = dictvalue["name"]
        hostid = dictvalue["hostid"]
        checkurl = dictvalue["steps"][0]["url"]
        # 拼接为文本
        text = f'{name}----{hostid}----{checkurl}'
        # 追加写入指定文件
        with open('./zabbix.txt', 'a+', encoding='utf-8') as f:
            f.writelines(text + '\n')


if __name__ == '__main__':
    host_id = '主机id'
    GetWebCheck(host_id)

可以看到我脚本中好像没获取web监控的应用集id唉。其实每个主机的应用集是不同用的,要在主机里面单独创建应用集后,才能获取该应用集在这个主机中的应用集id。

具体可以查看官网文档: https://www.zabbix.com/documentation/5.0/zh/manual/api/reference/httptest/create

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第1章 Python 处理 cassandra 升级后的回滚脚本 第 2 章 多套方案来提高 python web 框架的并发处理能力 第 3 章 python 写报警程序中的声音实现 winsound 第 4 章 一个脚本讲述 python 语言的基础规范,适合初学者 第 5 章 python 计算文件的行数和读取某一行内容的实现方法 第 6 章 python 中用 string.maketrans 和 translate 巧妙替换字符串 第 7 章 python linecache 模块读取文件用法详解 第 8 章 python 调用 zabbix 的 api 接口添加主机、查询组、主机、模板 第 9 章 python+Django 实现 Nagios 自动化添加监控项目 第 10 章 通过 pythonwebsocket 构建实时通信系统[扩展 saltstack 监控] 第 11 章 关于 B+tree (附 python 模拟代码) 第 12 章 Python 编写的 socket 服务器和客户端 第 13 章 python 之 MySQLdb 库的使用 第 14 章 python 监控文件或目录变化 第 15 章 Mongodb 千万级数据在 python 下的综合压力测试及应用探讨 第 16 章 通过 memcached 实现领号排队功能及 python 队列实例. 第 17 章 python 之利用 PIL 库实现页面的图片验证码及缩略图 第 18 章 如何将 Mac OS X10.9 下的 Python2.7 升级到最新的 Python3.3 第 19 章 使用 python 构建基于 hadoop 的 mapreduce 日志分析平台 第 20 章 报警监控平台扩展功能 url 回调的设计及应用 [python 语言] 第 21 章 服务端 socket 开发之多线程和 gevent 框架并发测试[python 语言] 第 22 章 利用 pypy 提高 python 脚本的执行速度及测试性能 第 23 章 python 实现 select 和 epoll 模型 socket 网络编程 第 24 章 对 Python-memcache 分布式散列和调用的实现 第 25 章 Parallel Python 实现程序的并行多 cpu 多核利用【pp 模块】 第 26 章 关于 python 调用 zabbix api 接口的自动化实例 [结合 saltstack] 第 27 章 Python 批量更新 nginx 配置文件 第 28 章 Python 通过 amqp 消息队列协议中的 Qpid 实现数据通信 第 29 章 python simplejson 模块浅谈 第 30 章 python Howto 之 logging 模块 第 31 章 Python FAQ3-python 中 的原始(raw)字符串

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值