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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 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 - 更新主机

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

相关文章
|
12天前
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
8天前
|
XML 数据可视化 API
商品详情数据实战案例,API接口系列
淘宝商品详情数据在电商领域具有广泛的应用价值,而淘宝商品详情API接口则为开发者提供了获取这些数据的重要途径。通过合理利用这些接口和数据,可以提升业务效率、优化用户体验,为电商行业的发展注入新的活力。
|
12天前
|
存储 人工智能 自然语言处理
高效档案管理案例介绍:文档内容批量结构化解决方案解析
档案文件内容丰富多样,传统人工管理耗时低效。思通数科AI平台通过自动布局分析、段落与标题检测、表格结构识别、嵌套内容还原及元数据生成等功能,实现档案的高精度分块处理和结构化存储,大幅提升管理和检索效率。某历史档案馆通过该平台完成了500万页档案的数字化,信息检索效率提升60%。
|
12天前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
在 Python 编程中,掌握图的深度优先遍历(DFS)和广度优先遍历(BFS)是进阶的关键。这两种算法不仅理论重要,还能解决实际问题。本文介绍了图的基本概念、邻接表表示方法,并给出了 DFS 和 BFS 的 Python 实现代码示例,帮助读者深入理解并应用这些算法。
25 2
|
13天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
29 1
|
18天前
|
存储 JSON API
淘宝API接口实战:高效获取商品标题、分类及店铺名称
在淘宝API接口实战中,通过以下步骤高效获取商品标题、分类及店铺名称:1. 准备工作:了解淘宝开放平台文档,注册开发者账号,选择开发语言和工具。2. 获取API访问权限:申请相应权限,提供应用场景说明。3. 调用API接口:构建HTTP请求,提供必要参数。4. 解析响应数据:提取JSON数据中的所需信息。5. 数据处理和存储:进一步处理并存储数据。6. 注意事项:遵守使用规范,注意调用频率和数据安全。示例代码使用Python调用淘宝API。
|
5天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
18 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
67 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
52 0
|
1月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
60 0