zabbix4.0 批量添加监控URL及告警

需求

做业务监控,需要监控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、创建模板

图片.png

2、创建自动发现规则

2.1 创建发现规则

注意类型:选择zabbix客户端或者zabbix客户端(主动式)


图片.png
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

在自动发现规则里选择创建监控项原型


图片.png

最终监控项原型


图片.png

3、模板关联主机

图片.png

4、测试

查看检测——最新数据,找到相应监控项,过了一会就会有数据说明检测成功


图片.png

5、配置触发器

应用url监控模板——自动发现规则(点进去)——触发器类型——创建触发器原型
选择条件的时候注意“选择原型:


图片.png
图片.png
{url-Active:url.status[{#URLNAME},http_code].last()}<>200

6、配置图形

注意:这块也是“添加原型”


图片.png

7、查看图形

图片.png

成功!!
详情页超时报警添加触发器即可

8、删除url地址

后期WEB.txt中的某些地址如果不需要再监控就需要删除这里边的url地址,但是它不会立即被删除,是和配置的时间有关系,如图,如果不想让它报警可以删除触发器和监控项即可


图片.png
图片.png

9、遇到的问题

刚开始url不可访问无法发出报警,但是恢复可以发出报警,并且在zabbix首页可以看到报警,只是动作没出来,注意不是自动发现的监控项有问题而是动作配置这块有问题,配置——动作——找到你创建的动作并查看即可

参考: http://www.jinxijing.com/post/919.html

你可能感兴趣的:(zabbix4.0 批量添加监控URL及告警)