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
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)}>=500 and <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)}<>200 and <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>