Zabbix是一个开源的提供分布式系统监视以及网络监视功能的解决方案。
Zabbix能监视各种网络参数,监控服务器系统的安全运营状况,并提供灵活的通知机制以让服务器管理员快速定位和解决存在的各种问题。
在使用Zabbix开始监控服务器后,Zabbix就会采集到服务器的各种网络参数,以及管理员自定义的各种各样的监控项数据。
Zabbix有开源的Web端给我们展示数据,包括图形,聚合图等,不过当我们需要批量获取一些数据时,我们在Web端逐个获取数据,效率是非常低的。
Zabbix为我们提供了API,我们可以通过调用API来获取我们想要的数据。
并且,Python中已经有写好的第三方库pyzabbix了,我们可以直接使用。
一、安装pyzabbix
pip install pyzabbix
二、通过pyzabbix调用Zabbix API获取数据
1.登录Zabbix服务器
from pyzabbix import ZabbixAPI
# 安装zabbix server的服务器ip
ZABBIX_SERVER = 'http://10.1.1.0/zabbix'
zapi = ZabbixAPI(ZABBIX_SERVER)
zapi.login('Admin', 'zabbix')
将上面的ip换成自己的zabbix server的ip,然后输入用户名密码来登录Zabbix,获取一个zapi对象,然后就可以使用zapi对象来调用Zabbix的API了。
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",
)
通过zapi对象,我们可以获取不同的数据,如主机、触发器、监控项、应用、模板等数据。
在这些数据的get()方法中,如果我们没有传入参数,则会获取所有的数据,如果我们传入参数,则会根据参数返回对应的数据,如在item.get()中传入一个hostids来获取指定host的监控项数据。
3.我们也可以通过key_的方式来查询数据
# 通过key来帅选数据
item_list = zapi.item.get(
hostids='',
search={
"key_": '',
},
output="extend",
)
在get()方法中,通过search参数来对数据进行筛选,search获取一个字典类型的参数,在search中我们指定需要获取数据的key_,返回的数据就是指定的内容。
具体在get()中怎么传入参数,可以传入哪些参数呢?可以参考Zabbix API文档,进入接口的详情说明页,里面列出了所有可以设置的参数和参数代表的含义,以及request和response的示例。
Zabbix Documentation:https://www.zabbix.com/documentation/4.0/zh/manual/api
三、调用Zabbix API进行其他操作
使用Zabbix API除了可以在Zabbix上获取数据,也可以向Zabbix添加数据,如添加监控项、导入模板等.
在Github上,可以找到pyzabbix相关的代码案例,我们可以使用这些案例或参考这些案例来开发自己的需求。
pyzabbix examples: https://github.com/lukecyca/pyzabbix/tree/master/examples
四、pyzabbix与py-zabbix
在Python中,除了pyzabbix外,还有另一个库叫py-zabbix,中间有一个横杠,所以在安装和使用的时候不要弄混了。
py-zabbix功能与pyzabbix的功能是有差异的,通常我们会使用它的sender模块下的ZabbixMetric和ZabbixSender来将数据发送到Zabbix上。
用法也比较简单,先pip install py-zabbix安装,然后使用:
from pyzabbix.sender import ZabbixMetric, ZabbixSender
packet = [
ZabbixMetric('hostname', 'test[system_status]', "OK"),
]
result = ZabbixSender(zabbix_server='zabbix_host', zabbix_port=10051).send(packet)
注意:在Python中导包时py-zabbix中间的横杠要去掉。
在代码中,我们先通过ZabbixMetric()来构建发送的数据包packet,ZabbixMetric()中传入Zabbix上创建的主机,监控项的key,以及需要发送到监控项的数据。然后使用ZabbixSender来将数据包发送到Zabbix平台,ZabbixSender中传入Zabbix服务器的ip和port,然后在send()方法中传入数据包packet,这样数据就会添加到Zabbix监控项了。