zabbix automatic discovery of http url and returns a status code alarm monitoring and control system

2019-06-04 18:39:12

#!/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 '{\n'
        printf '\t"data":[\n'
for((i=0;i<${#WEB_SITE[@]};++i))
{
                num=$(echo $((${#WEB_SITE[@]}-1)))
                if [[ "$i" != ${num} ]]
                then
                        printf "\t\t{ \n"
                        printf "\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$i]}\"},\n"
                else
                        printf "\t\t{ \n"
                        printf "\t\t\t\"{#SITENAME}\":\"${WEB_SITE[$num]}\"}]}\n"
                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 "\n"}')
#        /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

 

 

  

 

Objective: Bulk monitoring service URL of the status code returned, whether the service quality by monitoring zabbix.

1, zabbix installation

Check out this Permalink: https://www.cnblogs.com/small-wei/p/10911769.html

2, the preparation of monitoring scripts

cd / usr / lib / zabbix / externalscripts # I store script path, you can customize the storage path, the definition file zabbix_server.conf in, and zabbix-server service profile.

vim  web_site_code_status.sh

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. Create a list of URL

cat /etc/zabbix/zabbix_script.d/web_url_list.txt # This file is defined in the above script.

www.baidu.com

www.qq.com

www.redhat.com

https://www.redhat.com/en

Note: This can also add the port number after 

4, add the relevant key in the zabbix_agentd.conf

vim /etc/zabbix/zabbix_agentd.conf # client configuration file, add & modify the following

UnsafeUserParameters = 1 # parameters allow to pass all the characters in the user-defined parameters.

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, restart zabbix-agent

Linux6:

service   zabbix-agent  restart

Linux7:

systemctl  restart  zabbix-agent 

6, import zabbix monitoring template file.

Copy the following code:

 

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

  

Guess you like

Origin www.cnblogs.com/small-wei/p/10975339.html