概述
由於生產環境有大量url需要監控,形式如http://ip:埠/login,要求url狀態不為200即報警並且獲得響應時間(url可改成自己應用里的url),如果用zabbix,一個一個手動添加模板,會造成大量重複工作,如果利用腳本+mail,則無法圖形呈現。所以這裡利用zabbix的discovery功能來實現應用的監控。
一、zabbix客戶端配置
1、修改zabbix-agent端的配置文件
# vi /etc/zabbix/zabbix_agentd.conf=============================================================================================UnsafeUserParameters=1# 把這個值改為1,因為自動發現的腳本中有一些特殊字符,被認為是不安全的因素,1表示允許這些字符存在# 如果不改,後期在Server端就會報錯,原因就在這裡=============================================================================================# 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=============================================================================================
2、自動發現腳本(url_discovery.sh)
獲取監控URL,輸出格式為json格式,用於zabbix自動發現TCP
#!/bin/bashWEB_SITE=($(grep -v "^#" /data/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 ',' fidoneprintf "\\n\\t]\\n"printf "}\\n"
3、監控項腳本(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
#!/bin/bashurl=$1status=$2http_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
4、監控URL列表(/etc/zabbix/WEB.txt)
#weburlhttp://伺服器IP:8050/pass/login....
5、授權並重啟zabbix客戶端
chown -R zabbix:zabbix /etc/zabbixchmod -R 755 /etc/zabbixsystemctl restart zabbix-agent
6、在zabbix服務端驗證並測試
zabbix_get -s localhost -p 10050 -k url.discovery
二、zabbix-server的web端操作
1、創建模板
配置--模板--創建模板
2、配置自動發現規則
2.1、創建發現規則
配置-模板-創建發現規則
名稱:WEB URL discovery鍵值:url.discovery
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
2.3、最終的監控項原型
3、模板關聯主機
4、測試
4.1、查看監控項
配置-主機-監控項,可以看到我們定義的動態的key已經生成,失效的key到期會自動刪除
4.2、查看最新數據
監測-最新數據,也可以看到已經獲取到數據
5、配置觸發器原型
配置-模板-自動發現規則-觸發器類型-創建觸發器原型
名稱:http_code not 200表達式:如果最近連續4次取到的response_code值不是200,則觸發報警{url:url.status[{#URLNAME},http_code].last()}<>200 and {url:url.status[{#URLNAME},http_code].last(#1)}<>200 and {url:url.status[{#URLNAME},http_code].last(#2)}<>200 and {url:url.status[{#URLNAME},http_code].last(#3)}<>200
6、配置圖形
配置-模板-自動發現規則-圖形原型-創建圖形原型
監測-圖形,可以查看圖形
覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~