Python使用pyzabbix调用Zabbix API

发布时间 2023-09-19 17:44:57作者: 厚礼蝎

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 的传参方式

放回数据与示例相同