仅提供一个思路,怎么去实现这种功能
1:Configuration--Templates客户端配置
1.1:找到zabbix目标客户端,编写脚本获取需要的数据
vim web_site_code_status.py
#!/usr/bin/env python
#coding:utf-8
import os
import json
r = open('/etc/zabbix/web.txt','r').read().split()
devices = []
for devpath in r:
device = os.path.basename(devpath)
devices += [{'{#SITENAME}':device}]
print json.dumps({'data':devices},sort_keys=True,indent=7,separators=(',',':'))
####脚本不要放在Include=/etc/zabbix/zabbix_agentd.conf.d/ 开启的这个目录下
因为zabbix启动的时候会直接加载这个目录下面的所有文件,而我们写的脚本不
符合key:value格式,加载会报错
配置文件加入:
UserParameter=web.site.discovery,/etc/zabbix/web_site_code_status.py
重启服务
在服务端做测试
测试:./zabbix_get -s IP -k web.site.discovery
输出:{
"data":[
{
"{#SITENAME}":"www.baidu.com"
},
{
"{#SITENAME}":"sina.com"
}
]
}
输出如上面的json格式就可以了
1.2:根据上面的输出来做判断,比如我这里做的是检测网址是否能正常打开
直接在客户端配置文件里面做配置,也可以自己写脚本,运行脚本返回一个值就好了
UserParameter=web.site.code[*],curl -o /dev/null -s -w %{http_code} http://$1
$1就是web.site.code这个key后面中括号带的变量,因为我这里只有一个,所以检测就只有一个$1
重启客户端服务
切换到服务端
测试:./zabbix_get -s IP -k web.site.code[www.baidu.com]
200
返回结果表明正常
2:客户端前期准备工作完成,现在开始web界面的配置
2.1:Configuration--Templates
创建模板以及关联主机
2.2:创建Applications
2.3:创建发现规则Discovery rules
这个key就是前面获取json数据的key web.site.discovery
然后指定脚本里面的宏变量来获取数据
2.4:在Discovery rules里面创建Item prototypes
$1,就是宏变量代入之后的值
key就是web.site.code[*],这不过*号用宏变量代替,获取动态的值
2.5:在Discovery rules里面创建Trigger prototypes
2.6:在Discovery rules里面创建Graph prototypes
到此配置完毕,根据你配置的检测时间,去关联的主机里面查看有没有生成对应的items,trigger,graph