python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据

简介: python对接API二次开发高级实战案例解析:Zabbix API封装类实现获取认证密钥、所有主机组、所有主机、所有监控项和历史数据

Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着两点:

  • 该API包含一组独立的方法;
  • 客户端和API之间的请求和响应使用JSON格式进行编码。

传送门:Zabbix API官方文档


8e1159544def41aba448dd10534e115d.jpg


导入模块

在zabbix api开发中,一是爬取对应zabbix服务器内容,使用requests模块;二是将对应的数据进行解码输出json模块。

# -*- coding: UTF-8 -*-
# @Time : 2023-01-08 9:51
# @File : basr.py
# @Author : LockDataV
import json
import requests

当完成了前端的安装配置后,你就可以使用远程HTTP请求来调用API。为此,需要向位于前端目录中的 api_jsonrpc.php 文件发送HTTP POST请求。例如,如果你的Zabbix前端安装在 http://company.com/zabbix, 那么用HTTP请求来调用 apiinfo.version:


登录API接口封装函数

  • jsonrpc - API使用的JSON-RPC协议的版本; Zabbix API实现的JSON-RPC版本是2.0;
  • method -被调用的API方法名;
  • params - 将被传递给API方法的参数;
  • d - 请求的任意标识符;
  • auth -用户认证令牌;如果没有的话可以设置为null。
    def login(self):
        data = {
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {
                "user": self.user,
                "password": self.password
            },
            "id": 1,
            "auth": None
        }
        response = self.session.post(self.url, json=data)
        self.auth = response.json()['result']


根据给定参数检索符合条件的问题

    def get_problem(self):
        data = {
            "jsonrpc": "2.0",
            "method": "problem.get",
            "params": {
                "output": "extend",  # 返回该接口所有字段
                "sortfield": ["eventid"],  # 按照事件id排序
            },
            "auth": self.auth,
            "id": 1
        }
        response = self.session.post(self.url, json=data)
        a = response.json()
        print(a)


获取主机组对象

def get_group(self):
    data = {
        "jsonrpc": "2.0",
        "method": "hostgroup.get",
        "params": {
            "output": "extend",
            "sortfield": ["name"],
            "real_hosts": True,  # 只返回包含主机的主机组(未添加主机的主机组不可见)
        },
        "auth": self.auth,
        "id": 1
    }
    response = self.session.post(self.url, json=data)
    a = response.json()
    print(a)


获取所有主机

def get_host(self):
    data = {
        "jsonrpc": "2.0",
        "method": "host.get",
        "params": {
            "output": "extend",
            "sortfield": ["name"],
            "groupids": "4",  # 指定主机组id,数组或者单个id
            "selectItems": "extend",
            "selectTriggers": "extend",
        },
        "auth": self.auth,
        "id": 1
    }
    response = self.session.post(self.url, json=data)
    a = response.json()
    # print(a)


获取告警

def get_alert(self):
    data = {
        "jsonrpc": "2.0",
        "method": "alert.get",
        "params": {
            "output": "extend",
            "sortfield": ["clock"],
            "sortorder": "DESC",
            "limit": 1,
            "groupids": "4",  # 指定主机组id,数组或者单个id
            "hostids": "10084",  # 指定主机id,数组或者单个id
        },
        "auth": self.auth,
        "id": 1
    }
    response = self.session.post(self.url, json=data)
    a = response.json()
    # print(a)


获取已经触发的触发器

def get_triggers(self):
    data = {
        "jsonrpc": "2.0",
        "method": "trigger.get",
        "params": {
            "output": "extend",
            "filter": {
                "value": 1,
                "status": 0,
                "hostid": "10084",  # 指定主机id
            },
            "sortfield": "lastchange",
            "selectHosts": ["name"],
            # "selectItems": ["lastvalue", "units"]
            "selectItems": "extend"
        },
        "auth": self.auth,
        "id": 1
    }
    response = self.session.post(self.url, json=data)
    a = response.json()
    # print(a)


获取指定主机

,切监控项名称包含 “System uptime” 的监控项,包括触发器
def get_item(self):
    data = {
        "jsonrpc": "2.0",
        "method": "item.get",
        "params": {
            "output": "extend",
            "sortfield": ["itemid"],
            "groupids": "4",  # 指定主机组id,数组或者单个id
            "hostids": "10084",  # 指定主机id,数组或者单个id
            "with_triggers": True,
            # "search": {
            #     "name": "安防设备"
            # },
            "tags": [
                {
                    "tag": "设备归属",
                    "value": "",
                    "operator": "4"
                }
            ],
            # "filter": {
            #     "description": "安防设备",
            # },
            # "selectItemDiscovery": ["ts_delete"],
            "selectItemDiscovery": "extend",
            "selectHosts": "extend",
            "selectTriggers": "extend",
            "selectTags": "extend",
        },
        "auth": self.auth,
        "id": 1
    }
    response = self.session.post(self.url, json=data)
    a = response.json()
    print(json.dumps(a, indent=4, ensure_ascii=False))
    print(json.dumps(a))


函数封装

  • user,对应服务器用户名;
  • password,对应服务器登录密码;
  • host,对应服务器主机,填写域名或IP地址;
  • url,默认API访问地址/zabbix/api_jsonrpc.php
class Zabbix:
    def __init__(self, user, password):
        self.user = user
        self.password = password
        self.session = requests.Session()
        self.host = 'http://***'
        self.url = self.host + '/zabbix/api_jsonrpc.php'
        self.login()


函数调用

# 输入用户名和密码
zab = Zabbix(user, password)
# 调用对应的类的函数
zab.get_problem()


总结

Zabbix API封装类主要是使用.get方法来获取对应API数据。

  1. 1.获得认证密钥
  2. 2.获取zabbix所有的主机组
  3. 3.获取单个组下的所有主机
  4. 4.获取某个主机下的所有监控项
  5. 5.获取某个监控项的历史数据
  1. 6.获取某个监控项的最新数据

在实际的开发应用中,会牵涉更多的API接口,如host接口:

host.create - 创建新的主机
host.delete - 删除主机
host.get - 获取主机信息
host.massadd - 给主机添加相关对象
host.massremove - 删除主机相关对象
host.massupdate - 替换或移除主机相关对象
host.update - 更新主机

对应官方文档进行参数配置即可。

相关文章
|
22天前
|
缓存 API 网络架构
淘宝item_search_similar - 搜索相似的商品API接口,用python返回数据
淘宝联盟开放平台中,可通过“物料优选接口”(taobao.tbk.dg.optimus.material)实现“搜索相似商品”功能。该接口支持根据商品 ID 获取相似推荐商品,并返回商品信息、价格、优惠等数据,适用于商品推荐、比价等场景。本文提供基于 Python 的实现示例,包含接口调用、数据解析及结果展示。使用时需配置淘宝联盟的 appkey、appsecret 和 adzone_id,并注意接口调用频率限制和使用规范。
|
27天前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
27天前
|
JSON API 开发者
深度分析阿里妈妈API接口,用Python脚本实现
阿里妈妈是阿里巴巴旗下营销平台,提供淘宝联盟、直通车等服务,支持推广位管理、商品查询等API功能。本文详解其API调用方法,重点实现商品推广信息(佣金、优惠券)获取,并提供Python实现方案。
|
24天前
|
API Python
Python采集淘宝店铺所有商品API接口指南
淘宝没有公开的官方API供采集店铺商品数据,但可以通过以下几种方法获取商品信息。需要注意的是,淘宝有严格的反爬机制,直接采集可能违反其服务条款。
|
25天前
|
API 数据安全/隐私保护 开发者
深度分析苏宁API接口,用Python脚本实现
深度分析苏宁API接口,用Python脚本实现
|
27天前
|
JSON API 数据安全/隐私保护
深度分析虾皮城API接口,用Python脚本实现
虾皮开放平台提供丰富的API接口,支持商品管理、订单处理及促销信息查询等功能。本文详解API认证机制与调用方法,基于Python实现商品价格及到手价获取方案,适用于电商数据分析与运营。
|
27天前
|
前端开发 Shell API
深度分析58同城API接口,用Python脚本实现
58同城为国内知名分类信息平台,涵盖房产、招聘、二手车等多领域。本文基于网页抓包与解析,分享其非官方接口的Python实现方案,分析核心接口特性与反爬应对策略,适用于数据学习与信息聚合。注意:非官方接口存在风险,使用需遵守平台规则。
|
5月前
|
运维 监控 安全
【案例分享】中国通号卡斯柯公司:ZABBIX如何破解轨道交通监控难题
本文根据2023上海峰会上朱林贤的演讲整理,聚焦中国通号卡斯柯公司如何借助Zabbix实现轨道交通信号系统的智能化管理。作为中外合资企业,卡斯柯通过统一平台整合设备监控,大幅降低成本并提升灵活性,成功应用于国内外项目。文章探讨了传统监控系统的痛点、研发维护经验及国产化与开源技术挑战,为行业转型提供了宝贵启示。未来,开放协作将是推动轨道交通智能化发展的关键。
217 0
|
7月前
|
存储 缓存 监控
|
8月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
121 23

热门文章

最新文章