zoukankan      html  css  js  c++  java
  • Zabbix监控Low level discovery实时监控网站URL状态

    今天我们来聊一聊Low level discovery这个功能,我们为什么要用到loe level discovery这个功能呢?

    很多时候,在使用zabbix监控一些东西,需要对类似于Itens进行添加,这些items具有一些共同特性,

    如果说某些特定的参数是变量,而其他设置都一样,例如:一个程序有多个端口,需要多端口进行监控并配置Itmes,还有磁盘分区,·网卡名称等等,

    都是具有不确定性,如果我们配置固定的Items的话,会出现无法通用的问题,所以呢,我们需要来了解一下low level discovery这个功能

    Low level discovery的key返回值是一个JSON格式(如果是自定义的话,可以通过网站验证获取的值是否为正确的JSON格式的数)

    #自动发现特定的变量名称

    #添加对变量的Itmes

    下面我们来一个现实中的案例:

    业务需求:

    现在业务上用有打量的URL需要监控,形式如:http:www.xxx.com,要求URL状态不为200时发出报警

    需求分析 :

    具有打量的URL,且URL经常变化,需要增加URL即可完成监控

    解决方案:上述提到,URL经常发生变化,但是其他状态不变,这个是够刚好可以用zabbix的low level discovery功能来实现这一需求

    思路:

    1)既然有大量的URL需要监控,我们可以将URL域名地址写入一个配置文件里,方便后续调用监控

    2)zabbix上面没有监控URL的模板和监控项,因此只能自定义,写一个自动发现的脚本,该脚本是JSON格式:主要用于调用 URL并获取URL的状态码

    3)通过 zabbix_get在server端测试能否正确获取key值(URL状态码)

    4)WEB页面添加Low level discovery;创建监控模板,监控项,触发器类型以及图形等;实时监控状态码并做出相应的告警

    【zabbix-agent配置文件】

    # grep -vE "(#|^$)" /usr/local/zabbix/etc/zabbix_agentd.conf

    LogFile=/tmp/zabbix_agentd.log
    EnableRemoteCommands=0    #启用远程命令
    Server=192.168.37.129
    StartAgents=8
    ServerActive=192.168.37.129
    Hostname=192.168.37.130
    Timeout=8             #超时时间改为8即可,如果server端zabbix_get测试获取键值时提示超时,可进行修改调整
    Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/web_site_discovery.conf     #子配置文件,还有一种方式就是直接在agent.conf配置文件中的“UserParameter=”写入对应的键值
    UnsafeUserParameters=1

    【自定义Low level discovery自动发现脚本】

    mkdir -p /usr/local/zabbix/etc/scripts/

    vim /usr/local/zabbix/etc/scripts/Web.txt   #网站URL存放文件,将我们需要的监控的域名写入该自定义配置文件中

    www.hexun.com
    www.baidu.com
    www.weibo.com

     vim /usr/local/zabbix/etc/scripts/web_site_code_status 

    #!/bin/bash
    #Monitoring website domain name URL change script
    #mail:m18810455501@163.com
    #QQ:1261813048
    #/usr/bin/curl -o /dev/null -s -w %{http_code} http://$1/
    Web_SITE_discovery(){
    Web_SITE=($(cat /usr/local/zabbix/etc/scripts/Web.txt | grep -v "^#"))
    printf '{ '
    printf ' "data":[ '
    for((i=0;i<${#Web_SITE[@]};++i))
    {
    num=$(echo $((${#Web_SITE[@]}-1)))
    if [ "$i" != ${num} ];
    then
    printf " { "
    printf " "{#SITENAME}":"${Web_SITE[$i]}"}, "
    else
    printf " { "
    printf " "{#SITENAME}":"${Web_SITE[$num]}"}]} "
    fi
    }
    }
    web_site_code (){
    # /usr/bin/curl -o /dev/null -s -w %{http_code} http://$1
    /usr/bin/curl -I -m 10 -o /dev/null -s -w %{http_code}" " http://$1
    }

    case "$1" in
    web_site_discovery)
    Web_SITE_discovery
    ;;
    web_site_code)
    web_site_code $2
    ;;
    *)
    echo "Usage:$0 {web_site_discovery |web_site_code [URL]}"
    ;;
    esac

    # chmod 755 /usr/local/zabbix/etc/scripts/web_site_code_status    #脚本权限给予755

    【自定义Key值配置文件】

    # vim  /usr/local/zabbix/etc/zabbix_agentd.conf.d/web_site_discovery.conf     #子配置文件,已在agent.conf配置文件中Include中引用

    UserParameter=web.site.discovery,/usr/local/zabbix/etc/scripts/web_site_code_status web_site_discovery
    UserParameter=web.site.code[*],/usr/local/zabbix/etc/scripts/web_site_code_status web_site_code $1

     【测试】

    在server端·测试agent端自定的key值能否获取到?ok~从截图看出,都能获取到url域名状态码

    【Web页面添加Low level discory】

    1)创建自定义模板

    Configuration(配置)-----Templates(模板)----Create templates(创建模板)

     

    创建自动发现规则

    【创建应用集】

    【基于自动发现规则基础创建监控项原型】

    Ps:这里的键值一定要与之对应

     【创建监控项原型】

    创建触发器类型,设置多梯度告警检测,我们触发类型除了URL状态为200和301正常之外,其他不为200和301的状态码的都告警

    配置图像原型

    【验证】

    ok~下面大家所看到的的呢?我是在Web.txt配置文件中新增的URL,很明显该站点是不存在的,所以返回值是302,在触发器类型中符合报警出发条件,由此触发~

    触发类型我们设置的是梯度告警,由信息——》一般严重——》严重三个等级且是不同周期性告警:3分钟,10分钟,15分钟不同的告警级别

  • 相关阅读:
    Ext.create() 时的自适应高度和宽度
    C++ builder快捷键大全
    删除右键菜单中的选项
    函数中指针和引用的形参和实参
    一道关于继承和多态的题目
    关于静态对象构造
    关于多态代码和运行结果
    如何使用C++ Builder 6.0连接Access数据库
    BCB中的RTTI机制
    scanf()返回值(转)
  • 原文地址:https://www.cnblogs.com/bixiaoyu/p/9375270.html
Copyright © 2011-2022 走看看