简介
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
这个就是方法,使用的话
zapi.history.get()
参数
或者也可以参考下面的示例,看可以传什么样的参数
可以仿照 示例中 params
的传参方式
放回数据与示例相同
API示例2
以获取告警信息为例,查询官方API手册
https://www.zabbix.com/documentation/6.0/zh/manual/api/reference/alert/get
这个就是方法,使用的话
zapi.history.get()
请求:
{
"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