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存放文件,將我們需要的監控的域名寫入該自定義配置文件中
http://www.hexun.com http://www.baidu.com http://www.weibo.com
vim /usr/local/zabbix/etc/scripts/web_site_code_status
#!/bin/bash
#Monitoring website domain name URL change script
#mail:[email protected]
#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:這裏的鍵值一定要與之對應
創建觸發器類型,設置多梯度告警檢測,
設置不同周期告警。3,10,15分鐘三種不同的故障級別
【創建圖像原型】
到目前為止,整個模板已經構建完成~如下圖所示
我們將這個模板鏈接到某臺Agent端的主機上,等待30s左右時間,我們會發現,已經存在添加的三個站點的圖形 了,
Zabbix監控Low level discovery實時監控網站URL狀態