Zabbix監控Low level discovery實時監控網站URL狀態


今天我們來聊一聊Low level discovery這個功能,我們為什么要用到loe level discovery這個功能呢?

很多時候,在使用zabbix監控一些東西,需要對類似於Itens進行添加,這些items具有一些共同特性,

如果說某些特定的參數是變量,而其他設置都一樣,例如:一個程序有多個端口,需要多端口進行監控並配置Itmes,還有磁盤分區,·網卡名稱等等,

都是具有不確定性,如果我們配置固定的Items的話,會出現無法通用的問題,所以呢,我們需要來了解一下low level discovery這個功能

Low level discovery的key返回值是一個JSON格式(如果是自定義的話,可以通過網站驗證獲取的值是否為正確的JSON格式的數)

#自動發現特定的變量名稱

#添加對變量的Itmes

下面我們來一個現實中的案例:

業務需求:

現在業務上用有打量的URL需要監控,形式如:http:www.xxx.com,要求URL狀態不為200時發出報警

需求分析 :

具有打量的URL,且URL經常變化,需要增加URL即可完成監控

解決方案:上述提到,URL經常發生變化,但是其他狀態不變,這個是夠剛好可以用zabbix的low level discovery功能來實現這一需求

思路:

1)既然有大量的URL需要監控,我們可以將URL域名地址寫入一個配置文件里,方便后續調用監控

2)zabbix上面沒有監控URL的模板和監控項,因此只能自定義,寫一個自動發現的腳本,該腳本是JSON格式:主要用於調用 URL並獲取URL的狀態碼

3)通過 zabbix_get在server端測試能否正確獲取key值(URL狀態碼)

4)WEB頁面添加Low level discovery;創建監控模板,監控項,觸發器類型以及圖形等;實時監控狀態碼並做出相應的告警

【zabbix-agent配置文件】

# grep -vE "(#|^$)" /usr/local/zabbix/etc/zabbix_agentd.conf

LogFile=/tmp/zabbix_agentd.log
EnableRemoteCommands=0    #啟用遠程命令
Server=192.168.37.129
StartAgents=8
ServerActive=192.168.37.129
Hostname=192.168.37.130
Timeout=8             #超時時間改為8即可,如果server端zabbix_get測試獲取鍵值時提示超時,可進行修改調整
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/web_site_discovery.conf     #子配置文件,還有一種方式就是直接在agent.conf配置文件中的“UserParameter=”寫入對應的鍵值
UnsafeUserParameters=1

【自定義Low level discovery自動發現腳本】

mkdir -p /usr/local/zabbix/etc/scripts/

vim /usr/local/zabbix/etc/scripts/Web.txt   #網站URL存放文件,將我們需要的監控的域名寫入該自定義配置文件中

www.hexun.com
www.baidu.com
www.weibo.com

 vim /usr/local/zabbix/etc/scripts/web_site_code_status 

#!/bin/bash
#Monitoring website domain name URL change script
#mail:m18810455501@163.com
#QQ:1261813048
#/usr/bin/curl -o /dev/null -s -w %{http_code} http://$1/
Web_SITE_discovery(){
Web_SITE=($(cat /usr/local/zabbix/etc/scripts/Web.txt | grep -v "^#"))
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 (){
# /usr/bin/curl -o /dev/null -s -w %{http_code} http://$1
/usr/bin/curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" http://$1
}

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

# chmod 755 /usr/local/zabbix/etc/scripts/web_site_code_status    #腳本權限給予755

【自定義Key值配置文件】

# vim  /usr/local/zabbix/etc/zabbix_agentd.conf.d/web_site_discovery.conf     #子配置文件,已在agent.conf配置文件中Include中引用

UserParameter=web.site.discovery,/usr/local/zabbix/etc/scripts/web_site_code_status web_site_discovery
UserParameter=web.site.code[*],/usr/local/zabbix/etc/scripts/web_site_code_status web_site_code $1

 【測試】

在server端·測試agent端自定的key值能否獲取到?ok~從截圖看出,都能獲取到url域名狀態碼

【Web頁面添加Low level discory】

1)創建自定義模板

Configuration(配置)-----Templates(模板)----Create templates(創建模板)

 

創建自動發現規則

【創建應用集】

【基於自動發現規則基礎創建監控項原型】

Ps:這里的鍵值一定要與之對應

 【創建監控項原型】

 

創建觸發器類型,設置多梯度告警檢測,我們觸發類型除了URL狀態為200和301正常之外,其他不為200和301的狀態碼的都告警

配置圖像原型

【驗證】

ok~下面大家所看到的的呢?我是在Web.txt配置文件中新增的URL,很明顯該站點是不存在的,所以返回值是302,在觸發器類型中符合報警出發條件,由此觸發~

觸發類型我們設置的是梯度告警,由信息——》一般嚴重——》嚴重三個等級且是不同周期性告警:3分鍾,10分鍾,15分鍾不同的告警級別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM