zoukankan      html  css  js  c++  java
  • zabbix自动发现 url 以及对http返回状态码监控实现 告警

    2019-06-04 18:39:12

    目的:批量监控业务URL的返回状态码,通过zabbix监控判断业务好坏。

    1、zabbix安装

    请查看此永久链接:https://www.cnblogs.com/small-wei/p/10911769.html

    2、编写监控脚本

    cd  /usr/lib/zabbix/externalscripts      #本人存放脚本路径,存放路径可以自定义,这个定义文件在zabbix_server.conf中,及zabbix-server服务配置文件。

    vim  web_site_code_status.sh

    #!/bin/bash
    
    source /etc/profile >/dev/null 2>&1
    WEB_SITE_discovery () {
            WEB_SITE=($(grep -v "^#" /usr/local/zabbix/etc/zabbix_script.d/WEBURL.txt))
            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 () {
    #下面注释的是也可以使用域名+端口号
    #        host=$(echo "$1"|awk -F "/" '{print $3}')
    #   port=$(echo "$1"|awk -F "/" '{print $3}'|awk -F':' '{print $2}')
    #   if [[ -z $port ]]
    #   then
    #       ntlocal="127.0.0.1"
    #   else
    #       ntlocal="127.0.0.1:$port"
    #   fi
    #        http_uri=$(echo "$1"|awk -F "/" '{for(i=4;i<=NF;i++) printf "/" $i;printf "
    "}')
    #        /usr/bin/curl -H "Host:$host" -o /dev/null -s -w %{http_code} $ntlocal${http_uri}
        /usr/bin/curl -I "$1" 2> /dev/null | grep 'HTTP' | awk '{print $2}'
    }
    
    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

    3、创建URL列表

    cat  /etc/zabbix/zabbix_script.d/web_url_list.txt     #这个文件在上面的脚本中定义。

    www.baidu.com
    www.qq.com
    www.redhat.com
    https://www.redhat.com/en
    https://www/zabbix.com

    注意:这里也可以在后面加端口号 

    4、在zabbix_agentd.conf中添加相关的key

    vim  /etc/zabbix/zabbix_agentd.conf      #客户端配置文件中添加&修改如下内容

    UnsafeUserParameters=1       #允许将参数中的所有字符传递给用户定义的参数。

    UserParameter=web.site.discovery,/usr/lib/zabbix/externalscripts/web_site_code_status.sh web_site_discovery
    UserParameter=web.site.code[*],/usr/lib/zabbix/externalscripts/web_site_code_status.sh web_site_code $1

    5、重启zabbix-agent

    Linux6:

    service   zabbix-agent  restart

    Linux7:

    systemctl  restart  zabbix-agent 

    6、导入zabbix监控模板文件。

    复制如下代码,在本地计算机中创建一个文件:zbx_export_templates.xml (自定义创建):

    <?xml version="1.0" encoding="UTF-8"?>
    <zabbix_export>
        <version>3.4</version>
        <date>2019-06-04T18:15:17Z</date>
        <groups>
            <group>
                <name>http_status_code</name>
            </group>
        </groups>
        <templates>
            <template>
                <template>Automatically discover http_code</template>
                <name>Automatically discover http_code</name>
                <description>automatically discover http_status_code</description>
                <groups>
                    <group>
                        <name>http_status_code</name>
                    </group>
                </groups>
                <applications/>
                <items/>
                <discovery_rules>
                    <discovery_rule>
                        <name>Disvover http url</name>
                        <type>0</type>
                        <snmp_community/>
                        <snmp_oid/>
                        <key>web.site.discovery</key>
                        <delay>30s</delay>
                        <status>0</status>
                        <allowed_hosts/>
                        <snmpv3_contextname/>
                        <snmpv3_securityname/>
                        <snmpv3_securitylevel>0</snmpv3_securitylevel>
                        <snmpv3_authprotocol>0</snmpv3_authprotocol>
                        <snmpv3_authpassphrase/>
                        <snmpv3_privprotocol>0</snmpv3_privprotocol>
                        <snmpv3_privpassphrase/>
                        <params/>
                        <ipmi_sensor/>
                        <authtype>0</authtype>
                        <username/>
                        <password/>
                        <publickey/>
                        <privatekey/>
                        <port/>
                        <filter>
                            <evaltype>0</evaltype>
                            <formula/>
                            <conditions/>
                        </filter>
                        <lifetime>30d</lifetime>
                        <description/>
                        <item_prototypes>
                            <item_prototype>
                                <name>http url $1</name>
                                <type>0</type>
                                <snmp_community/>
                                <snmp_oid/>
                                <key>web.site.code[{#SITENAME}]</key>
                                <delay>30s</delay>
                                <history>90d</history>
                                <trends>365d</trends>
                                <status>0</status>
                                <value_type>3</value_type>
                                <allowed_hosts/>
                                <units/>
                                <snmpv3_contextname/>
                                <snmpv3_securityname/>
                                <snmpv3_securitylevel>0</snmpv3_securitylevel>
                                <snmpv3_authprotocol>0</snmpv3_authprotocol>
                                <snmpv3_authpassphrase/>
                                <snmpv3_privprotocol>0</snmpv3_privprotocol>
                                <snmpv3_privpassphrase/>
                                <params/>
                                <ipmi_sensor/>
                                <authtype>0</authtype>
                                <username/>
                                <password/>
                                <publickey/>
                                <privatekey/>
                                <port/>
                                <description/>
                                <inventory_link>0</inventory_link>
                                <applications/>
                                <valuemap>
                                    <name>HTTP response status code</name>
                                </valuemap>
                                <logtimefmt/>
                                <preprocessing/>
                                <jmx_endpoint/>
                                <application_prototypes/>
                                <master_item_prototype/>
                            </item_prototype>
                        </item_prototypes>
                        <trigger_prototypes>
                            <trigger_prototype>
                                <expression>{Automatically discover http_code:web.site.code[{#SITENAME}].last(#3,15)}>=500 and 
    {Automatically discover http_code:web.site.code[{#SITENAME}].last(,0)}</expression>
                                <recovery_mode>0</recovery_mode>
                                <recovery_expression/>
                                <name>web.site.code {#SITENAME} greater 500</name>
                                <correlation_mode>0</correlation_mode>
                                <correlation_tag/>
                                <url/>
                                <status>0</status>
                                <priority>4</priority>
                                <description/>
                                <type>0</type>
                                <manual_close>0</manual_close>
                                <dependencies/>
                                <tags/>
                            </trigger_prototype>
                            <trigger_prototype>
                                <expression>{Automatically discover http_code:web.site.code[{#SITENAME}].last(#3,15)}<>200 and 
    {Automatically discover http_code:web.site.code[{#SITENAME}].last(,0)}</expression>
                                <recovery_mode>0</recovery_mode>
                                <recovery_expression/>
                                <name>web.site.code {#SITENAME} is not 200</name>
                                <correlation_mode>0</correlation_mode>
                                <correlation_tag/>
                                <url/>
                                <status>0</status>
                                <priority>0</priority>
                                <description/>
                                <type>0</type>
                                <manual_close>0</manual_close>
                                <dependencies/>
                                <tags/>
                            </trigger_prototype>
                        </trigger_prototypes>
                        <graph_prototypes>
                            <graph_prototype>
                                <name>web.site.code.on {#SITENAME}</name>
                                <width>900</width>
                                <height>200</height>
                                <yaxismin>0.0000</yaxismin>
                                <yaxismax>100.0000</yaxismax>
                                <show_work_period>1</show_work_period>
                                <show_triggers>1</show_triggers>
                                <type>0</type>
                                <show_legend>1</show_legend>
                                <show_3d>0</show_3d>
                                <percent_left>0.0000</percent_left>
                                <percent_right>0.0000</percent_right>
                                <ymin_type_1>0</ymin_type_1>
                                <ymax_type_1>0</ymax_type_1>
                                <ymin_item_1>0</ymin_item_1>
                                <ymax_item_1>0</ymax_item_1>
                                <graph_items>
                                    <graph_item>
                                        <sortorder>0</sortorder>
                                        <drawtype>0</drawtype>
                                        <color>1A7C11</color>
                                        <yaxisside>0</yaxisside>
                                        <calc_fnc>2</calc_fnc>
                                        <type>0</type>
                                        <item>
                                            <host>Automatically discover http_code</host>
                                            <key>web.site.code[{#SITENAME}]</key>
                                        </item>
                                    </graph_item>
                                </graph_items>
                            </graph_prototype>
                        </graph_prototypes>
                        <host_prototypes/>
                        <jmx_endpoint/>
                    </discovery_rule>
                </discovery_rules>
                <httptests/>
                <macros/>
                <templates/>
                <screens/>
            </template>
        </templates>
        <value_maps>
            <value_map>
                <name>HTTP response status code</name>
                <mappings>
                    <mapping>
                        <value>100</value>
                        <newvalue>Continue</newvalue>
                    </mapping>
                    <mapping>
                        <value>101</value>
                        <newvalue>Switching Protocols</newvalue>
                    </mapping>
                    <mapping>
                        <value>102</value>
                        <newvalue>Processing</newvalue>
                    </mapping>
                    <mapping>
                        <value>200</value>
                        <newvalue>OK</newvalue>
                    </mapping>
                    <mapping>
                        <value>201</value>
                        <newvalue>Created</newvalue>
                    </mapping>
                    <mapping>
                        <value>202</value>
                        <newvalue>Accepted</newvalue>
                    </mapping>
                    <mapping>
                        <value>203</value>
                        <newvalue>Non-Authoritative Information</newvalue>
                    </mapping>
                    <mapping>
                        <value>204</value>
                        <newvalue>No Content</newvalue>
                    </mapping>
                    <mapping>
                        <value>205</value>
                        <newvalue>Reset Content</newvalue>
                    </mapping>
                    <mapping>
                        <value>206</value>
                        <newvalue>Partial Content</newvalue>
                    </mapping>
                    <mapping>
                        <value>207</value>
                        <newvalue>Multi-Status</newvalue>
                    </mapping>
                    <mapping>
                        <value>208</value>
                        <newvalue>Already Reported</newvalue>
                    </mapping>
                    <mapping>
                        <value>226</value>
                        <newvalue>IM Used</newvalue>
                    </mapping>
                    <mapping>
                        <value>300</value>
                        <newvalue>Multiple Choices</newvalue>
                    </mapping>
                    <mapping>
                        <value>301</value>
                        <newvalue>Moved Permanently</newvalue>
                    </mapping>
                    <mapping>
                        <value>302</value>
                        <newvalue>Found</newvalue>
                    </mapping>
                    <mapping>
                        <value>303</value>
                        <newvalue>See Other</newvalue>
                    </mapping>
                    <mapping>
                        <value>304</value>
                        <newvalue>Not Modified</newvalue>
                    </mapping>
                    <mapping>
                        <value>305</value>
                        <newvalue>Use Proxy</newvalue>
                    </mapping>
                    <mapping>
                        <value>306</value>
                        <newvalue>Switch Proxy</newvalue>
                    </mapping>
                    <mapping>
                        <value>307</value>
                        <newvalue>Temporary Redirect</newvalue>
                    </mapping>
                    <mapping>
                        <value>308</value>
                        <newvalue>Permanent Redirect/Resume Incomplete</newvalue>
                    </mapping>
                    <mapping>
                        <value>400</value>
                        <newvalue>Bad Request</newvalue>
                    </mapping>
                    <mapping>
                        <value>401</value>
                        <newvalue>Unauthorized</newvalue>
                    </mapping>
                    <mapping>
                        <value>402</value>
                        <newvalue>Payment Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>403</value>
                        <newvalue>Forbidden</newvalue>
                    </mapping>
                    <mapping>
                        <value>404</value>
                        <newvalue>Not Found</newvalue>
                    </mapping>
                    <mapping>
                        <value>405</value>
                        <newvalue>Method Not Allowed</newvalue>
                    </mapping>
                    <mapping>
                        <value>406</value>
                        <newvalue>Not Acceptable</newvalue>
                    </mapping>
                    <mapping>
                        <value>407</value>
                        <newvalue>Proxy Authentication Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>408</value>
                        <newvalue>Request Timeout</newvalue>
                    </mapping>
                    <mapping>
                        <value>409</value>
                        <newvalue>Conflict</newvalue>
                    </mapping>
                    <mapping>
                        <value>410</value>
                        <newvalue>Gone</newvalue>
                    </mapping>
                    <mapping>
                        <value>411</value>
                        <newvalue>Length Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>412</value>
                        <newvalue>Precondition Failed</newvalue>
                    </mapping>
                    <mapping>
                        <value>413</value>
                        <newvalue>Payload Too Large</newvalue>
                    </mapping>
                    <mapping>
                        <value>414</value>
                        <newvalue>Request-URI Too Long</newvalue>
                    </mapping>
                    <mapping>
                        <value>415</value>
                        <newvalue>Unsupported Media Type</newvalue>
                    </mapping>
                    <mapping>
                        <value>416</value>
                        <newvalue>Requested Range Not Satisfiable</newvalue>
                    </mapping>
                    <mapping>
                        <value>417</value>
                        <newvalue>Expectation Failed</newvalue>
                    </mapping>
                    <mapping>
                        <value>418</value>
                        <newvalue>I'm a Teapot</newvalue>
                    </mapping>
                    <mapping>
                        <value>419</value>
                        <newvalue>Authentication Timeout</newvalue>
                    </mapping>
                    <mapping>
                        <value>420</value>
                        <newvalue>Method Failure/Enhance Your Calm</newvalue>
                    </mapping>
                    <mapping>
                        <value>421</value>
                        <newvalue>Misdirected Request</newvalue>
                    </mapping>
                    <mapping>
                        <value>422</value>
                        <newvalue>Unprocessable Entity</newvalue>
                    </mapping>
                    <mapping>
                        <value>423</value>
                        <newvalue>Locked</newvalue>
                    </mapping>
                    <mapping>
                        <value>424</value>
                        <newvalue>Failed Dependency</newvalue>
                    </mapping>
                    <mapping>
                        <value>426</value>
                        <newvalue>Upgrade Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>428</value>
                        <newvalue>Precondition Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>429</value>
                        <newvalue>Too Many Requests</newvalue>
                    </mapping>
                    <mapping>
                        <value>431</value>
                        <newvalue>Request Header Fields Too Large</newvalue>
                    </mapping>
                    <mapping>
                        <value>440</value>
                        <newvalue>Login Timeout</newvalue>
                    </mapping>
                    <mapping>
                        <value>444</value>
                        <newvalue>No Response</newvalue>
                    </mapping>
                    <mapping>
                        <value>449</value>
                        <newvalue>Retry With</newvalue>
                    </mapping>
                    <mapping>
                        <value>450</value>
                        <newvalue>Blocked by Windows Parental Controls</newvalue>
                    </mapping>
                    <mapping>
                        <value>451</value>
                        <newvalue>Unavailable for Legal Reasons/Redirect</newvalue>
                    </mapping>
                    <mapping>
                        <value>494</value>
                        <newvalue>Request Header Too Large</newvalue>
                    </mapping>
                    <mapping>
                        <value>495</value>
                        <newvalue>Cert Error</newvalue>
                    </mapping>
                    <mapping>
                        <value>496</value>
                        <newvalue>No Cert</newvalue>
                    </mapping>
                    <mapping>
                        <value>497</value>
                        <newvalue>HTTP to HTTPS</newvalue>
                    </mapping>
                    <mapping>
                        <value>498</value>
                        <newvalue>Token Expired/Invalid</newvalue>
                    </mapping>
                    <mapping>
                        <value>499</value>
                        <newvalue>Client Closed Request/Token Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>500</value>
                        <newvalue>Internal Server Error</newvalue>
                    </mapping>
                    <mapping>
                        <value>501</value>
                        <newvalue>Not Implemented</newvalue>
                    </mapping>
                    <mapping>
                        <value>502</value>
                        <newvalue>Bad Gateway</newvalue>
                    </mapping>
                    <mapping>
                        <value>503</value>
                        <newvalue>Service Unavailable</newvalue>
                    </mapping>
                    <mapping>
                        <value>504</value>
                        <newvalue>Gateway Timeout</newvalue>
                    </mapping>
                    <mapping>
                        <value>505</value>
                        <newvalue>HTTP Version Not Supported</newvalue>
                    </mapping>
                    <mapping>
                        <value>506</value>
                        <newvalue>Variant Also Negotiates</newvalue>
                    </mapping>
                    <mapping>
                        <value>507</value>
                        <newvalue>Insufficient Storage</newvalue>
                    </mapping>
                    <mapping>
                        <value>508</value>
                        <newvalue>Loop Detected</newvalue>
                    </mapping>
                    <mapping>
                        <value>509</value>
                        <newvalue>Bandwidth Limit Exceeded</newvalue>
                    </mapping>
                    <mapping>
                        <value>510</value>
                        <newvalue>Not Extended</newvalue>
                    </mapping>
                    <mapping>
                        <value>511</value>
                        <newvalue>Network Authentication Required</newvalue>
                    </mapping>
                    <mapping>
                        <value>520</value>
                        <newvalue>Unknown Error</newvalue>
                    </mapping>
                    <mapping>
                        <value>598</value>
                        <newvalue>Network Read Timeout Error</newvalue>
                    </mapping>
                    <mapping>
                        <value>599</value>
                        <newvalue>Network Connect Timeout Error</newvalue>
                    </mapping>
                </mappings>
            </value_map>
        </value_maps>
    </zabbix_export>
    

      

     

    7、导入模板文件zbx_export_templates.xml

    登录zabbix,登录过程跳过;

    导入成功后可以看到如下名称的模板: 

    8、验证查看监控:

    至此url监控完毕。

    参考链接:https://blog.csdn.net/qq_34857250/article/details/78323780

    参考链接:https://www.zabbix.com

  • 相关阅读:
    Web后台框架 目录
    C++ 目录
    【花书笔记】线性代数
    【Python数据挖掘概念、方法与实践】
    【统计学习基础】2. Overview of Supervised Learning
    字节与16进制
    【西瓜书】线性模型
    MySQL入门经典
    【机器学习基石】感知机模型
    python:web应用程序
  • 原文地址:https://www.cnblogs.com/small-wei/p/10975339.html
Copyright © 2011-2022 走看看