面試官:如何用zabbix實現應用url批量監控?

2020-02-23     波波說運維

概述

由於生產環境有大量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方面的內容,感興趣的朋友可以關注下~


文章來源: https://twgreatdaily.com/z-CReXAB3uTiws8KjrYJ.html