简介

调用Zabbix API的Python模块PyZabbix_python

PyZabbix是一个用于使用Zabbix API的Python模块。Zabbix大家都知道,是一个开源的提供分布式系统监视以及网络监视功能的系统,其拥有直观的UI界面和详尽的监测数据,非常适合运维人员的工作使用。

如果运维人员需要把这些数据在其他环境中使用,可以通过Python中已经有写好的第三方库pyzabbix来实现API数据获取。

要求

  • 针对 Zabbix 4.0 LTS、5.0 LTS、6.0 LTS 和 6.4 进行了测试。

官网

GitHub - lukecyca/pyzabbix: Python Zabbix API

开始

使用 pip 安装 PyZabbix:

$ pip install pyzabbix

您现在可以像这样导入和使用 pyzabbix:

from pyzabbix import ZabbixAPI

# 安装zabbix server的服务器ip或网址
zapi = ZabbixAPI("http://zabbixserver.example.com")
zapi.login("zabbix user", "zabbix pass")

# Zabbix>=5.4的您还可以使用API令牌,而不是用户/通行证进行身份验证
# zapi.login(api_token='xxxxx')
print("Connected to Zabbix API Version %s" % zapi.api_version())

for h in zapi.host.get(output="extend"):
    print(h['hostid'])

自定义 HTTP 请求

PyZabbix使用HTTP的requests库。您可以通过配置 PyZabbix 使用的 requests Session 对象来自定义请求参数。

这适用于:

  • 自定义标题
  • 启用 HTTP 身份验证
  • 启用 Keep-Alive
  • 禁用 SSL 证书验证
from pyzabbix import ZabbixAPI

zapi = ZabbixAPI("http://zabbixserver.example.com")

# 启用HTTP身份验证
zapi.session.auth = ("http user", "http password")

# 禁用SSL证书验证
zapi.session.verify = False

# 指定超时(秒)
zapi.timeout = 5.1

# 登录(在HTTP Auth的情况下,只需要用户名,如果传递了密码,将被忽略)
zapi.login("http user", "http password")

# Zabbix>=5.4的您还可以使用API令牌,而不是用户/通行证进行身份验证
# zapi.login(api_token='xxxxx')

启用调试日志记录

如果你需要调试Zabbix API的一些问题,你可以启用日志记录的输出,pyzabbix已经使用了默认的python日志记录工具,但默认情况下,它记录为“Null”,你可以在你的程序上改变这个行为,这里是一个例子:

import sys
import logging
from pyzabbix import ZabbixAPI

stream = logging.StreamHandler(sys.stdout)
stream.setLevel(logging.DEBUG)
log = logging.getLogger('pyzabbix')
log.addHandler(stream)
log.setLevel(logging.DEBUG)


zapi = ZabbixAPI("http://zabbixserver.example.com")
zapi.login('admin','password')

# Zabbix>=5.4的您还可以使用API令牌,而不是用户/通行证进行身份验证
# zapi.login(api_token='xxxxx')

预期输出如下:

Sending: {
    "params": {
        "password": "password",
        "user": "admin"
    },
    "jsonrpc": "2.0",
    "method": "user.login",
    "id": 2
}
Response Code: 200
Response Body: {
    "jsonrpc": "2.0",
    "result": ".................",
    "id": 2
}
>>>

调用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

API示例

这里以获取历史记录为例

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

调用Zabbix API的Python模块PyZabbix_zabbix_02

这个就是方法,使用的话

zapi.history.get()

参数

调用Zabbix API的Python模块PyZabbix_python_03

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

调用Zabbix API的Python模块PyZabbix_python_04

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

放回数据与示例相同

API示例2

以获取告警信息为例,查询官方API手册

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

调用Zabbix API的Python模块PyZabbix_python_05

这个就是方法,使用的话

zapi.history.get()


调用Zabbix API的Python模块PyZabbix_pyzabbix_06

调用Zabbix API的Python模块PyZabbix_身份验证_07

请求:

{
           "jsonrpc": "2.0",
           "method": "alert.get",
           "params": {
               "output": "extend",
               "actionids": "3"
           },
           "auth": "038e1d7b1735c6a5436ee9eae095879e",
           "id": 1
       }

响应:

{
           "jsonrpc": "2.0",
           "result": [
               {
                   "alertid": "1",
                   "actionid": "3",
                   "eventid": "21243",
                   "userid": "1",
                   "clock": "1362128008",
                   "mediatypeid": "1",
                   "sendto": "support@company.com",
                   "subject": "PROBLEM: Zabbix agent on Linux server is unreachable for 5 minutes: ",
                   "message": "Trigger: Zabbix agent on Linux server is unreachable for 5 minutes: \nTrigger status: PROBLEM\nTrigger severity: Not classified",
                   "status": "0",
                   "retries": "3",
                   "error": "",
                   "esc_step": "1",
                   "alerttype": "0",
                   "p_eventid": "0",
                   "acknowledgeid": "0"
               }
           ],
           "id": 1
       }

许可证

LGPL 2.1 http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html

Zabbix API Python 库。

原始 Ruby 库版权所有 (C) 2009 Andrew Nelson nelsonab(at)red-tux(dot)net

原始 Python 库版权所有 (C) 2009 Brett Lentz brett.lentz(at)gmail(dot)com

这个库是免费软件;您可以重新分发它和/或 根据 GNU Lesser General Public 的条款对其进行修改 由自由软件基金会发布的许可证;也 许可证的 2.1 版,或(由您选择)任何更高版本。

分发这个库是希望它有用, 但没有任何保证;甚至没有默示的保证 适销性或特定用途的适用性。查看 GNU Lesser General Public License了解更多详情。

您应该已经收到了 GNU Lesser General Public 的副本 与此库一起许可;如果没有,请写信给自由软件 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA