需求
做业务监控,需要监控60多个url是否存活并且还要监控详情页的时间,如果访问时间过长就报警
如果使用zabbix自带的web场景,会有大量重复工作,所以通过zabbix的discovery功能实现应用的监控。
环境
centso6
zabbix4.0
参考:
https://cloud.tencent.com/developer/article/1784173
配置
1、修改zabbix-agent端的配置文件
# vi /etc/zabbix/zabbix_agentd.conf
=============================================================================================
UnsafeUserParameters=1
# 把这个值改为1,因为自动发现的脚本中有一些特殊字符,被认为是不安全的因素,1表示允许这些字符存在
# 如果不改,后期在Server端就会报错,原因就在这里
=============================================================================================
2、添加zabbix自动发现脚本url.conf
注意:url_discovery.sh和url_status.sh都是linux脚本,用于获取url返回值【发送json数据给自动发现规则的键值,为每个监控项发送值】
# vi /etc/zabbix/zabbix_agentd.d/url.conf //添加自定义键值
=============================================================================================
# 第一行是自动发现脚本的路径
UserParameter=url.discovery,/etc/zabbix/zabbix_agentd.d/url_discovery.sh
# 第二行是检测URL状态的脚本路径
UserParameter=url.status[*],/etc/zabbix/zabbix_agentd.d/url_status.sh $1 $2
3、添加自动发现脚本url_discovery.sh,用于zabbix自动发现TCP
注意:/etc/zabbix/WEB.txt这个指url文本的文件,如果放到别的地方记得修改
#vim /etc/zabbix/zabbix_agentd.d/url_discovery.sh
#!/bin/bash
WEB_SITE=($(grep -v "^#" /etc/zabbix/WEB.txt))
length=${#WEB_SITE[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<${#WEB_SITE[@]};++i))
do
printf '\n\t\t{'
printf "\"{#URLNAME}\":\"${WEB_SITE[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ','
fi
done
printf "\n\t]\n"
printf "}\n"
=============================================================================================
直接执行这个脚本输出大概是这样的
{
"data":[
{"{#URLNAME}":"http://www.baidu.com"}
]
}
此时WEB.txt只有一个url
[root@zabbix zabbix_agentd.d]# cat /etc/zabbix/WEB.txt
http://www.baidu.com
4、监控项脚本url_status.sh
指标解释 :
http_code:获取curl获取URL的http状态码
time_total:完成请求所用的时间,单位为s
time_connect:建立到服务器的TCP 连接所用的时间,单位为s
time_starttransfer:在发出请求之后,Web 服务器返回数据的第一个字节所用的时间,单位为s
speed_download:传输速度,单位为B/s,这里换算成MB/s
# vim /etc/zabbix/zabbix_agentd.d/url_status.sh
#!/bin/bash
url=$1
status=$2
http_code () {
/usr/bin/curl -o /dev/null -s -w %{http_code} $url
}
time_total () {
/usr/bin/curl -o /dev/null -s -w %{time_total} $url
}
time_connect () {
/usr/bin/curl -o /dev/null -s -w %{time_connect} $url
}
time_starttransfer () {
/usr/bin/curl -o /dev/null -s -w %{time_starttransfer} $url
}
speed_download () {
/usr/bin/curl -o /dev/null -s -w %{speed_download} $url|awk '{print $1/1024/1024}'
}
case $status in
http_code)
http_code
;;
time_total)
time_total
;;
time_connect)
time_connect
;;
time_starttransfer)
time_starttransfer
;;
speed_download)
speed_download
;;
*)
echo "Usage:$0 {[URL] http_code|time_total|time_connect|time_starttransfer|speed_download}"
;;
esac
=============================================================================================
单独执行这个脚本大概是这个样子:
/etc/zabbix/zabbix_agentd.d/url_status.sh http://www.baidu.com/ http_code
200
后面的http_code参数可以换成“http_code|time_total|time_connect|time_starttransfer|speed_download”
就会返回相应的输出
5、监控url列表/etc/zabbix/WEB.txt
[root@zabbix zabbix_agentd.d]# cat /etc/zabbix/WEB.txt
http://www.baidu.com
6、授权并重启客户端
# chown -R zabbix:zabbix /etc/zabbix/
# chmod 755 url_discovery.sh url_status.sh
# service zabbix-agent restart && tail -f /var/log/zabbix/zabbix_agentd.log
如果zabbix客户端时被动式现在就可以使用zabbix_get在linux端测试,但是因为我的客户端是主动式,没有成功
zabbix_get -s localhost -p 10050 -k url.discovery
zabbix-server WEB端操作
1、创建模板
2、创建自动发现规则
2.1 创建发现规则
注意类型:选择zabbix客户端或者zabbix客户端(主动式)
2.2 创建监控项原型
名称: {#URLNAME} 状态码
键值: url.status[{#URLNAME},http_code]
信息类型:数字(无正负)
单位: ops/second #这个单位很重要,如果没有这个单位会导致触发器无法识别这个item
名称: {#URLNAME} 响应时间
键值: url.status[{#URLNAME},time_total]
信息类型:浮点数
单位: s
名称: {#URLNAME} 连接时间
键值: url.status[{#URLNAME},time_connect]
信息类型:浮点数
单位: s
名称: {#URLNAME} 返回数据时间
键值: url.status[{#URLNAME},time_starttransfer]
信息类型:浮点数
单位: s
名称: {#URLNAME} 传输速度
键值: url.status[{#URLNAME},speed_download]
信息类型:浮点数
单位: MB/s
在自动发现规则里选择创建监控项原型
最终监控项原型
3、模板关联主机
4、测试
查看检测——最新数据,找到相应监控项,过了一会就会有数据说明检测成功
5、配置触发器
应用url监控模板——自动发现规则(点进去)——触发器类型——创建触发器原型
选择条件的时候注意“选择原型:
{url-Active:url.status[{#URLNAME},http_code].last()}<>200
6、配置图形
注意:这块也是“添加原型”
7、查看图形
成功!!
详情页超时报警添加触发器即可
8、删除url地址
后期WEB.txt中的某些地址如果不需要再监控就需要删除这里边的url地址,但是它不会立即被删除,是和配置的时间有关系,如图,如果不想让它报警可以删除触发器和监控项即可
9、遇到的问题
刚开始url不可访问无法发出报警,但是恢复可以发出报警,并且在zabbix首页可以看到报警,只是动作没出来,注意不是自动发现的监控项有问题而是动作配置这块有问题,配置——动作——找到你创建的动作并查看即可
参考: http://www.jinxijing.com/post/919.html