事前准备
有些时候我们需要在非zabbix的web界面里得到zabbix-server对某台服务器的实时监控值。但是有些值是zabbix-server加工过的,比如eth0入网流量
,zabbix-server加工的方法如下:
可见是每秒的变量并且还乘了8,那么如果要得到这样加工过的值,想通过shell得到linux的指标无疑是十分麻烦的。那么对于这种需求,我们想到的第一个办法就是使用zabbix的api,通过api去获取值比爬网页要方便许多(而且zabbix-server的web页面不是那么好爬的)。
Zabbix 3.0的API官方文档:https://www.zabbix.com/documentation/3.0/manual/api
Zabbix 3.0的python版API官方文档:https://github.com/gescheit/scripts/tree/master/zabbix
这里我更推荐用python版的api,因为使用zabbix-api
这个python第三方库让开发变得更为简洁。
安装zabbix-api
安装zabbix-api
最方便的方法就是pip安装。本文的python版本2.7.15
,使用源码安装的,安装包并不带pip,那么安装pip的方法如下:
1
2
3
4
5
6
7
8
9
10
11
12yum install -y zlib-devel zlib openssl openssl-devel
mv /usr/bin/pip /usr/bin/pip-bak #备份原有的pip
wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz#md5=f07e4b0f4c1c9368fcd980d888b29a65
tar -zxvf setuptools-12.0.3.tar.gz
cd setuptools-12.0.3
python setup.py install #这一步需要上面刚安装的zlib
wget https://files.pythonhosted.org/packages/d0/92/1e8406c15d9372084a5bf79d96da3a0acc4e7fcf0b80020a4820897d2a5c/pip-7.1.2.tar.gz
#或者去https://pypi.org/project/pip/7.1.2/#files页面下载pip-7.1.2.tar.gz
tar -zxcf pip-7.1.2.tar.gz
cd pip-7.1.2
sudo python setup.py install
ln -s /usr/local/python27/bin/pip2.7 /usr/bin/pip #做一个新的快捷方式
有了pip之后,就可以安装zabbix-api
,命令是:pip install zabbix-api
。在python的命令行里输入from zabbix_api import ZabbixAPI
不报错就代表安装成功。
链接zabbix
通过zabbix-server鉴权的代码如下:
1
2
3
4
5
6#coding:utf-8
#这个脚本是用来获取zabbix 定时流量值
from zabbix_api import ZabbixAPI
zapi = ZabbixAPI(server="http://网页地址/zabbix/api_jsonrpc.php")
zapi.login("网页的用户名", "网页的密码") #鉴权
如果没报错,就证明已经成功连接到zabbix-server了。
获取监控项
还是以eth0入网流量
为例,获取它的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12#coding:utf-8
#这个脚本是用来获取zabbix 定时流量值
from zabbix_api import ZabbixAPI
zapi = ZabbixAPI(server="http://网页地址/zabbix/api_jsonrpc.php")
zapi.login("网页的用户名", "网页的密码") #鉴权
hostname = ["服务器1名称","服务器2名称","服务器3名称","服务器4名称"]
for name in hostname:
list_item = zapi.item.get({"output": "extend","filter":{'host':name},"search":{'key_':'net.if.in[eth0]'}})
eth0_value = list_item[0]["lastvalue"]
print "Incoming traffic bandwidth is:"+(eth0_value)
可见多么简单!
上面代码里的hostname就是zabbix网页里的Host name
,如图:
然后使用zapi.item.get
方法通过filter
来过滤,最后得到对应的key值。zapi下面还有很多方法,比如zapi.hostgroup.get
、zapi.host.get
、zapi.application.get
等等等等,可以对于自己的需要,灵活运用。
参考文档
https://blog.csdn.net/LYJ_viviani/article/details/70568434
https://segmentfault.com/a/1190000014241994
http://blog.51cto.com/xiaofengfeng/1907573