首页 > 编程语言 >Python使用pyzabbix调用Zabbix API

Python使用pyzabbix调用Zabbix API

时间:2023-09-19 17:44:38浏览次数:48  
标签:extend get Python item Zabbix API output zapi

Zabbix是一个开源的提供分布式系统监视以及网络监视功能的解决方案。

Zabbix能监视各种网络参数,监控服务器系统的安全运营状况,并提供灵活的通知机制以让服务器管理员快速定位和解决存在的各种问题。

在使用Zabbix开始监控服务器后,Zabbix就会采集到服务器的各种网络参数,以及管理员自定义的各种各样的监控项数据。

Zabbix有开源的Web端给我们展示数据,包括图形,聚合图等,不过当我们需要批量获取一些数据时,我们在Web端逐个获取数据,效率是非常低的。

Zabbix为我们提供了API,我们可以通过调用API来获取我们想要的数据。

并且,Python中已经有写好的第三方库pyzabbix了,我们可以直接使用。

安装pyzabbix

pip install pyzabbix

通过pyzabbix调用Zabbix API获取数据

登录Zabbix服务器

from pyzabbix import ZabbixAPI


# 安装zabbix server的服务器ip
ZABBIX_SERVER = 'http://example.com'

zapi = ZabbixAPI(ZABBIX_SERVER)
zapi.login('Admin', 'zabbix')

调用API获取数据

# 获取主机
host_list = zapi.host.get(
    output="extend",
)

# 获取触发器
triggers = zapi.trigger.get(
    output="extend",
    selectHosts=['host'],
)

# 获取应用
application_list = zapi.application.get(
    hostids='',
    output="extend",
)

# 获取监控项
item_list = zapi.item.get(
    hostids='',
    applicationids='',
    output="extend",
)

# 获取模板
template = zapi.template.get(
    output="extend",
)

自助查询相关api

最主要的就是官网给出的api

https://www.zabbix.com/documentation/6.0/zh/manual/api/reference

或者 参考库的例子(暂未测试成功)

https://github.com/lukecyca/pyzabbix/tree/master/examples

例子

from pyzabbix import ZabbixAPI
from datetime import datetime
import time
import pprint

# 安装zabbix server的服务器ip
ZABBIX_SERVER = 'http://192.168.1.5'

zapi = ZabbixAPI(ZABBIX_SERVER)

# 登录
zapi.login('Admin', 'zabbix')

# 获取主机的主机ID和主机名
hosts = zapi.host.get(
    # 获取所有字段
    # output="extend",
    # 只获取特定字段
    output=[
        "hostid",
        "host"
    ],
    # 过滤特定字段的特定值
    filter={
        "host": [
            "Zabbix server",
        ]
    }
)
pprint.pprint(hosts)
if len(hosts) > 0:
    # 如果获取到了主机,就取出hostid字段
    item_list = zapi.item.get(
        hostids=hosts[0]["hostid"],
        applicationids='',
        filter={
            "name": [
                # 然后查询名称叫做 /: Free inodes in % 的字段的查询项
                "/: Free inodes in %",
            ]
        },
        output="extend",
    )
    pprint.pprint(item_list)
    if len(item_list) > 0:
        # 如果查询项找到了,就取出查询项的ID
        item_id = item_list[0]["itemid"]
        # 然后根据查询项的ID取出历史记录
        historys = zapi.history.get(
            # 查询项的ID
            itemids=item_id,
            history=0,
            sortfield="clock",
            sortorder="DESC",
            limit=10,
            output="extend",
        )
        pprint.pprint(historys)

最后查询历史记录的字段解释:

  • history 0表示浮点数
    其他可选项 1 - 字符;
    2 - 日志;
    3 - 无符号数;
    4 - 文本。
    默认: 3.
  • sortfield 按给定的属性对结果进行排序。
    可能的取值: itemid 和 clock
    字段ID或者按时间排序
  • sortorder 排序方法 DESC表示倒序
  • limit 取出的格数
  • output 表示输出的数据 extend表示所有扩展字段 或者设置成特定字段

如何参考

这里以获取历史记录为例

地址 https://www.zabbix.com/documentation/6.0/zh/manual/api/reference/history/get

这个就是方法,使用的话

zapi.history.get()

参数

就是这些参数

或者也可以参考下面的示例,看可以传什么样的参数

可以仿照 示例中 params 的传参方式

放回数据与示例相同

标签:extend,get,Python,item,Zabbix,API,output,zapi
From: https://www.cnblogs.com/guangdelw/p/17715304.html

相关文章

  • python3的schedule模块
    一、schedule模块:1、基本操作:importscheduleimporttime defhello(name):  print("hello%s"%name) defjob():  print("I'mworking...") #每十分钟执行任务schedule.every(10).minutes.do(job)#每个小时执行任务schedule.every().hour.do(job)#......
  • Python端连接nacos的配置settings
    Python端连接nacos的配置settings安装依赖pipinstallnacos-sdk-python#Nacos配置文件为yaml的依赖pipinstallpyyaml基础使用#导入包importnacos,yaml#连接地址SERVER_ADDRESSES='需要连接的nacos地址'#命名空间NAMESPACE='需要连接的命名空间'#账......
  • 在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点
    目录疾病数据创建节点根据检查结果、医生的临床经验得出疾病疾病数据disease_data.csv建议值用“”引起来。避免中间有,号造成误识别疾病"干眼""右膝髌上囊及关节腔少量积液"创建节点importloggingimportpandasaspdfromutils.neo4j_providerimportdriverloggi......
  • Python API教程:API入门(上)
    什么是API?一个API,或被称为应用程序接口,是一个服务器为你提供一个接收或发送数据的代码。API通常用来接收数据。本文就集中焦点在此话题中。当我们想从一个API中接收数据,我们需要开始请求。请求可以包含整个Web。例如,你可以浏览博客文章。你的浏览器开始请求我们的Web服务器,会返回整......
  • 软件测试|使用Python打印五子棋棋盘
    简介五子棋是我们传统的益智类游戏,在制作五子棋时,我们需要先将棋盘打印出来,本文就来介绍一下使用Python打印五子棋棋盘。步骤一:打印空棋盘首先,我们需要在Python中定义一个棋盘函数,该函数将打印一个空棋盘。下面是代码示例:defprint_board():foriinrange(15):forji......
  • 电商商品API数据:概念、应用与未来趋势
    一、引言随着电子商务的飞速发展,电商平台间的竞争愈发激烈。为了提供更优质的服务,许多电商平台选择开放其商品API数据,允许第三方开发者利用这些数据创建各种创新的应用。本文将对电商商品API数据的相关概念、应用场景及未来发展趋势进行深入探讨。二、电商商品API数据概述1.电商商......
  • 在线问诊 Python、FastAPI、Neo4j — 创建 检查节点
    目录症状数据创建节点根据不同的症状,会建议做些相对应的检验、检查症状数据examine_data.csv建议值用“”引起来。避免中间有,号造成误识别检查"膝关节核磁""眼睛酸胀""视力""砂眼""辨色力""角膜""眼底"创建节点参考创建药品节点。importloggingfromutils.neo......
  • PyCharm中Directory与Python package的区别
    Directory目录Pythonpackagepython包有一个__init.py__文件__init.py__文件该文件与Python的import机制有关,关乎到哪些.py文件是对外可访问的。在__init.py__文件中定义特殊变量_all_,将要包含的模块赋值给该变量,例如在Image/init.py中定义_all_=['tiff','bmp','j......
  • python报错:pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
    运行python代码报错:       问题发现:问题其实十分的狗血,这个代码是在服务器上运行的,运行之前其实并没有看具体的代码情况,gitclone下载下来就直接运行了,原来这个代码需要进行图片绘制,说直白些就是需要显示屏,于是解决方法也十分简单,就是换个带桌面的电脑或者使用......
  • Python字符串
    1.字符串的基本操作::::转义符操作:格式化操作:{name1="附件"name2="上课"print("%s的%s"%(name2,name1))}{print(f"{name2}的{name1}")}  2.字符串序列操作::::“容器”加“有序存储"-9-8-7-6-5-4-3 -2 -1  负索引h  e  l  l  o  y u......