Python获取zabbix问题触发器

news2024/9/23 5:16:45

背景:阿里云的ECS服务器因为阿里云升级插件,导致安全防护程序重启,产生不同的端口。导致低自动发现注册的端口 大量报警。

解决:杀掉关于因为非业务 变更的端口检测的触发器。

相关文档:

Zabbix监控之主机端口监控自动发现

zabbix监控端口原理

一个个去添加listen监控tcp的话不现实啊,还是也搞自动发现吧

分割下来也是2步啊

第一步脚本丢zabbix-agent下产生自定义键值

第二步不就是zabbix-server添加自动发现绑定这个键值咯

 

什么是安骑士Agent插件?

Agent 插件_云安全中心(安骑士)-阿里云帮助中心

解决思路

1、根据zabbix的api 获取的token

2、根据token获取到问题主机的触发器id

3、根据触发器id 删除相关的触发器,

4、消停大面积的告警

zabbix相关的API文档 可以查询官方文档或者博客

https://www.cnblogs.com/rxysg/p/15700912.html 

Python调用Zabbix API接口批量修改(禁用/启用)触发器trigger_啥是比亚的技术博客_51CTO博客

1、获取zabbix的token 

# -*- coding: utf-8 -*-
# @Time    : 2023/2/17 16:45
# @Author  : 南宫乘风
# @File    : zabbix_trigger.py
# @Software: PyCharm
import json
import os
import requests

url = "http://ip/zabbix/api_jsonrpc.php"  # 此处域名修改为相应的地址
headers = {
    'Content-Type': 'application/json-rpc'
}

tokens = '97553b7342457602a0a6452f0058c0ed'


def token_get():  # 根据账号密码获取token
    data = {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",  # zabbix管理员用户名
            "password": "密码"  # 账户密码
        },
        "auth": None,
        "id": 1
    }
    json_data = json.dumps(data)
    req = requests.post(url, data=json_data, headers=headers)
    js_req = req.json()
    print(js_req['result'])
    return js_req['result']

2、获取zabbix有问题主机触发器的id


def hosts_get(token):  # 获取有问题主机的触发器id
    # data = {
    #     "jsonrpc": "2.0",
    #     "method": "host.get",
    #     "params": {
    #         "output": ["hostid", "name"],
    #         "filter": {
    #             # 筛选条件
    #             "value": 1,  # value值为1表示有问题
    #             "status": 0  # status为0表示已启用的trigger
    #         },
    #     },
    #
    #     "auth": token,
    #     "id": 1
    # }
    data = {
        "jsonrpc": "2.0",
        "method": "trigger.get",
        "params": {
            # output表示输出结果包含参数有哪些
            "output": [
                "triggerid",
                "description",
                "status",
                "value",
                "priority",
                "lastchange",
                "recovery_mode",
                "hosts",
                "state",
            ],
            "selectHosts": "hosts",  # 需包含主机ID信息,以便于根据主机ID查询主机信息
            "selectItems": "items",
            "filter": {
                # 筛选条件
                "value": 1,  # value值为1表示有问题
                "status": 0  # status为0表示已启用的trigger
            },
        },
        "auth": token,  # 这里的auth就是登录后获取的
        'id': '1'  # 这个id可以随意
    }
    json_data = json.dumps(data)
    req = requests.post(url, data=json_data, headers=headers)
    js_req = req.json()
    print(len(js_req['result']), js_req['result'])
    id_list = []
#判断 有问题的地自动发现的端口
    for item in js_req['result']:
        if 'PROCESS' in item['description']:
            id_list.append(item['triggerid'])
    print(len(id_list), id_list)
    return js_req['result']

3、删除触发器的ID

def del_trigger(id):
    id_one = []
    ids = id_one.append(str(id))

    values = {

        "jsonrpc": "2.0",

        "method": "trigger.delete",

        "params": id_one,  # 触发器id

        "auth": tokens,

        "id": 1

    }
    json_data = json.dumps(values)
    req = requests.post(url, data=json_data, headers=headers)
    js_req = req.json()
    print(js_req)
    # return js_req['result']

完正代码

# -*- coding: utf-8 -*-
# @Time    : 2023/2/17 16:45
# @Author  : 南宫乘风
# @Email   : 1794748404@qq.com
# @File    : zabbix_trigger.py
# @Software: PyCharm
import json
import os
import requests

url = "http://ip/zabbix/api_jsonrpc.php"  # 此处域名修改为相应的地址
headers = {
    'Content-Type': 'application/json-rpc'
}

tokens = '97553b7342457602a0a6452f0058c0ed'


def token_get():  # 根据账号密码获取token
    data = {
        "jsonrpc": "2.0",
        "method": "user.login",
        "params": {
            "user": "Admin",  # zabbix管理员用户名
            "password": "密码"  # 账户密码
        },
        "auth": None,
        "id": 1
    }
    json_data = json.dumps(data)
    req = requests.post(url, data=json_data, headers=headers)
    js_req = req.json()
    print(js_req['result'])
    return js_req['result']


def hosts_get(token):  # 获取所有主机信息
    # data = {
    #     "jsonrpc": "2.0",
    #     "method": "host.get",
    #     "params": {
    #         "output": ["hostid", "name"],
    #         "filter": {
    #             # 筛选条件
    #             "value": 1,  # value值为1表示有问题
    #             "status": 0  # status为0表示已启用的trigger
    #         },
    #     },
    #
    #     "auth": token,
    #     "id": 1
    # }
    data = {
        "jsonrpc": "2.0",
        "method": "trigger.get",
        "params": {
            # output表示输出结果包含参数有哪些
            "output": [
                "triggerid",
                "description",
                "status",
                "value",
                "priority",
                "lastchange",
                "recovery_mode",
                "hosts",
                "state",
            ],
            "selectHosts": "hosts",  # 需包含主机ID信息,以便于根据主机ID查询主机信息
            "selectItems": "items",
            "filter": {
                # 筛选条件
                "value": 1,  # value值为1表示有问题
                "status": 0  # status为0表示已启用的trigger
            },
        },
        "auth": token,  # 这里的auth就是登录后获取的
        'id': '1'  # 这个id可以随意
    }
    json_data = json.dumps(data)
    req = requests.post(url, data=json_data, headers=headers)
    js_req = req.json()
    print(len(js_req['result']), js_req['result'])
    id_list = []
    for item in js_req['result']:
        if 'PROCESS' in item['description']:
            id_list.append(item['triggerid'])
    print(len(id_list), id_list)
    return js_req['result']

#这边我做了个调试,如果想直接一次运行成功,建议自己改动 启动是的代码

id_lists = ['21284', '21244', '21249', '21275', '21264', '21278', '21262', '21263', '21266', '21270', '21272', '21276',
            '21277', '21279', '21267', '21269', '21254', '21282', '21287', '21268', '21273', '21274', '21285', '21289',
            '21283', '21286', '21290', '21251', '21250', '21243']


def del_trigger(id):
    id_one = []
    ids = id_one.append(str(id))

    values = {

        "jsonrpc": "2.0",

        "method": "trigger.delete",

        "params": id_one,  # 触发器id

        "auth": tokens,

        "id": 1

    }
    json_data = json.dumps(values)
    req = requests.post(url, data=json_data, headers=headers)
    js_req = req.json()
    print(js_req)
    # return js_req['result']


for i in id_lists:
    del_trigger(i)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/355728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3. 投票 案例项目(合集)

3.投票-1创建项目和子应用 创建项目 命令$ python django-admin startproject mysite 目录结构mysite/ # 项目容器、可任意命名manage.py # 命令行工具mysite/ # 纯 Python 包 # 你引用任何东西都要用到它__init__.py # 空文件 告诉Python这…

面试官让你说说react状态管理?

hooks 为什么不能放在条件判断里 以 setState 为例,在 react 内部,每个组件(Fiber)的 hooks 都是以链表的形式存在 memoizeState 属性中 update 阶段,每次调用 setState,链表就会执行 next 向后移动一步。如果将 setState 写在条…

7-Zip压缩文件如何设置和清除密码?

7-zip拥有极高的压缩比,压缩比要比普通ZIP文件高30-50%,也是很多人选用的压缩格式。和其他压缩文件一样,7-Zip也可以设置密码保护,今天就来说说如何设置和清除7-Zip压缩包的密码。 首先,我们可以通过软件应用商店直接…

代码随想录算法训练营第三十四天 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球

一、参考资料柠檬水找零https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html 根据身高重建队列 https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html 用最少数量的箭引爆气球ht…

【Redis】Redis 哈希 Hash 键值对集合操作 ( 哈希 Hash 键值对集合简介 | 查询操作 | 增加操作 | 修改操作 )

文章目录一、哈希 Hash 键值对集合二、查询操作1、Redis 中查询 Hash 键值对数据2、查询 Hash 键是否存在3、查询 Hash 中所有的键 Field4、查询 Hash 中所有的值三、增加操作1、Redis 中插入 Hash 键值对数据2、批量插入 Hash 键值对数据四、修改操作1、Hash 中 Field 键对应值…

2|数据挖掘|聚类分析|k-means/k-均值算法

k-means算法k-means算法,也被称为k-平均或k-均值,是一种得到最广泛应用的聚类算法。算法首先随机选择k个对象,每个对象初始地代表了一个簇的平均值或中心。对剩余的每个对象根据其与各个簇中心的距离,将它赋给最近的簇。然后重新计…

XSS-labs-master

XSS 经典14关这边先说一下常用的弹窗手法<script>alert(1)</script> <script>confirm(1)</script> <script>alert(1)</script> <script>alert(/1/zyl)</script> <script>alert(document.cookie)</script> <scr…

Framework学习之旅:Zygote进程

概述 在Android系统中&#xff0c;DVM(Dalvik 虚拟机和ART、应用程序进程以及运行系统的关键服务SystemServer进程都是由Zygote进程来创建的。通过fork&#xff08;复制进程&#xff09;的形式来创建应用程进程和SystemServer进程&#xff0c;由于Zygote进程在启动时会创建DVM…

目标检测综述(一份全的自制PPT): 涵盖各种模型简介对比,适合入门和了解目标检测现状

[TOC](目标检测综述(一份全的自制PPT): 涵盖各种模型简介对比&#xff0c;适合入门和了解目标检测现状) 注&#xff1a;本文仅供学习&#xff0c;未经同意勿转。分享的PPT请勿二次传播&#xff0c;或者用于其他商用途径。若使用本文PPT请注明来源&#xff0c;感谢配合 前言&…

全网超详细的下载与安装VMware虚拟机以及为什么要安装VMware虚拟机

文章目录1. 文章引言2. 下载VMware3. 安装VMware1. 文章引言 我们使用最多的系统是windows系统&#xff0c;因为&#xff0c;国内电脑厂商的操作系统(os)基本是windows系统&#xff0c;比如华为、联想、华硕等电脑。 但线上的服务器大多是Linux系统&#xff0c;而我们经常使用…

numpy 中常用的数据保存、fmt多个参数

在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多 一、保存为二进制文件(.npy/.npz) &#xff08;1&#xff09;numpy.save(file, arr, allow_pickleTrue, fix_importsTrue) file:文件名…

基于微信小程序的生活日用品交易平台 的设计与实现

基于微信小程序的生活日用品交易平台 的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一…

【信息化知识】

信息化知识 信息化 政务内网需要副省级以上 数据是信息的载体&#xff0c;信息的载体不仅仅只是数据 控制论创始人维纳及信息论的奠基者香农对信息的定义&#xff1a;信息是事物运动状态和状态变化的自我表述 信息化的主体是全体社会成员 信息的质量属性&#xff1a;可验证…

Datawhale统计学习方法打卡Task02

学习教材《统计学习方法&#xff08;第二版&#xff09;》李航 学习内容&#xff1a;第1章 统计学习及监督学习概论 第2章 感知机 感知机&#xff08;perceptron&#xff09;是二类分类的线性分类模型。其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和…

seata源码-全局事务提交 服务端源码

前面的博客中&#xff0c;我们介绍了&#xff0c;发起全局事务时&#xff0c;是如何进行全局事务提交的&#xff0c;这篇博客&#xff0c;主要记录&#xff0c;在seata分布式事务中&#xff0c;全局事务提交的时候&#xff0c;服务端是如何进行处理的 发起全局事务提交操作 事…

时间复杂度(超详解+例题)

全文目录引言如何衡量一个算法的好坏时间复杂度时间复杂度的定义时间复杂度的大O表示法实例test1test2test3test4test5总结引言 如何衡量一个算法的好坏 我们在写算法的时候&#xff0c;对于实现同样的作用的不同算法&#xff0c;我们如何判断这个算法的好坏呢&#xff1f; …

微前端知识点汇总

1、微前端的实现方案 基于 qiankun 的微前端实践 微前端&#xff08;Micro-Frontends&#xff09;是一种类似于微服务的架构&#xff0c;它将微服务的理念应用于浏览器端&#xff0c;即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。 微前端目标直指巨石…

【Kubernetes】【十一】Pod详解 Pod的生命周期

Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期&#xff0c;它主要包含下面的过程&#xff1a; pod创建过程 运行初始化容器&#xff08;init container&#xff09;过程 运行主容器&#xff08;main container&#xff09; 容器启动后钩子&#…

陆拾伍- 如何通过数据影响决策

零、为何能影响 客观的表达其实不一定是客观&#xff0c;只要一被展示&#xff0c;就有可能被主观的意愿所影响。 如何通过客观的数据去展示以及放大主观的意愿&#xff0c;主要有以下几种方法&#xff1a; 一、图表内容顺序 原始数据展示 这种展示&#xff0c;对于 A、B店来…

基于微信小程序的青少年生理健康知识小助手

基于微信小程序的青少年生理健康知识小助手 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目…