Low-level Discovery 來實現動態監控同一應用不同端口

 羣裏今天有個哥們可能對low-level discovery 理解有點偏差,導致出了個小問題很久沒排查出來。個人覺得這個需求接下來,肯定更多人會去使用,避免大家走些彎路。特此瑪下文檔,文字功底不好,請原諒!!


需求:

 基於中小型公司,成本原因,很可能一臺機器上部署多個同一個應用,但是不同端口的應用。比如在一臺機器上部署5 個memcached.但是端口不盡相同,這樣在zabbix 監控時,有點不好辦,有可能需要寫多個不同端口的腳本去監控,也有可能通過宏定義來解決,但是太麻煩了!!!


解決:

 Zabbix 有個功能是low-level discovery,自己寫個JSON 格式的小腳本,輸出本機不同端口同一應用。然後弄個模板,結合JSON 腳本,就能實現不同端口同一應用監控。


案例:

 這裏列舉我生產案例當中的memcached,而redis 也是一樣,只是利用zabbix 用戶做的時候,有點小麻煩!!!

1.準備json 腳本,我這裏是shell

cat memcached.sh

#!/bin/bash
discovery(){
#netstat -nlput|awk -F":" '/memcached/ {print $0}' |grep -v udp |awk -F: '{print $2}'|awk '{print$1}' >/tmp/memcached.log
ps -ef | grep memcached | grep -v grep | awk '{print $17}' > /tmp/memcached.log
port=($(cat /tmp/memcached.log))
            printf '{\n'
            printf '\t"data":[\n'
for((i=0;i<${#port[@]};i++))
{
      num=$(echo $((${#port[@]}-1)))
      if [ "$i" != ${num} ];
         then
      printf "\t\t{ \n"
      printf "\t\t\t\"{#MEMCACHEDPORT}\":\"${port[$i]}\"},\n"
         else
            printf "\t\t{ \n"
            printf "\t\t\t\"{#MEMCACHEDPORT}\":\"${port[$num]}\"}]}\n"
      fi
}
}
case "$1" in
discovery)
discovery
;;
esac


2.客戶端zabbix_agentd.conf 文件中調用

UnsafeUserParameters=1
UserParameter=redis.discovery,/usr/local/zabbix/bin/redis.sh discovery


3.服務端測試,是否能發現客戶端的memcached 不同端口

wKioL1MxLSuQZCK1AAC3TeRHXdE130.jpg


4.上述如果都沒問題,那麼可以操作WEB 頁面了。

選擇Administration --> General

wKioL1MxLZzA5048AABv7vwEIUY434.jpg

右上角選擇正則表達式(Regular expressions)

wKiom1MxLcShD4ygAABmAikWE9A706.jpg

創建正則表達式

wKioL1MxLZzCRTGoAAK_MkPo5Cg712.jpg


5.強烈建議,做個模板,然後在裏面配discovery 規則,以及items、trigger、graph

創建模板我就不演示了,偷個懶!! 直接選擇Discovery rules 創建規則,如下!!

wKiom1MxLcTxQOViAAK9HK1k1q4302.jpg


這裏Macro {#MEMCACHEDPORT},就是我們腳本傳來"{#MEMCACHEPORT}",而Regexp是我們剛剛定義的正則表達式名字。


規則創建好了,我們就可以添加items,trgger,graph 了。

注:一定是在我們的模板Memcached 的Discovery 裏面添加item

wKioL1MxLmSC603qAAKDv6gvRVw345.jpg

這裏面唯一要注意的,畫紅線的地方。這裏使用的key 末尾{#MEMCACHEDPORT}是我剛纔定義的macro。而這裏面key,memcached[accepting_conns,*] 是我定義的採集數據的腳本。這個大家可以根據自己的實際情況進行編寫,偷懶的話,網上也有模板,動動手谷歌下就來了。!!!


Trigger

wKiom1MxLozAmTZrAAGF0xr_qhM266.jpg


Graph

wKiom1MxLozRbrHnAAHeVoVFyBA116.jpg

通過上述做法,你就可以定義了一個memcached low-level discovery 模板,然後就可以就裝   有memcached 主機與這個模板link 上就OK 啦。


這樣在Monitoring--> Latest data 中就可以看到數據啦。只不過我這裏是沒連接,所以沒數據!

wKioL1MxLmWgHh_YAAEJ6s0umT4352.jpg


基於這些步驟,大致可以完成你的需求,其他的你就照葫蘆畫瓢。。然後你也可以配個discovery,只要是memcached 機器全部link 這個Memcached low-level discovery 模板。就又

可以偷點懶了。

如果有參照這個,大家細心點,其實照着itnihao 共享的手冊其實已經可以完成這個了。!!

只是大家可能沒仔細看吧!!!

寫的馬馬虎虎,見諒!!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章