zabbix監控redis叢集lld
一.概述
自動發現模板需要2個指令碼,模板下載
一個是自動發現指令碼,可以是shell或者python等其他語言,指令碼檢測到埠號或其他資訊,以json格式輸出。
另一個是鍵值的指令碼,可參考來自定義鍵值
模板通過自動使用自動發現指令碼,獲取到當前有哪些埠,再配合監控項來監控那些埠。以此達到套用模板後,自動監控當前的服務的作用。
二.通用設定
客戶端操作,新增或開啟如下
vim /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf Timeout=8 UnsafeUserParameters=1
修改配置檔案後,重啟
systemctl restart zabbix-agent
三.建立指令碼
1.安裝依賴,用nc和telnet獲取資訊
yum -y install nc telnet
2.客戶端配置
當前用redis舉例,其它都差不多
編寫自動發現指令碼,可以py也可以shell
cd /etc/zabbix/script
vim auto_found.sh
#!/bin/bash redis() { #獲取埠並放到數組裡 a=`netstat -unltp | grep redis | awk -F'[: /]+' '{print $5,$9}' | sort -n | uniq | awk '{print $1}'` b=0 port=() for i in `echo $a` do #因為redis叢集會啟動2個埠,比如7000,會啟動17000埠,所以要去重,不然監控該重複了 echo $a | grep "1${i}" &> /dev/null [ $? -eq 0 ] && port[$b]=$i && let b++ done #以下為以JSON格式輸出埠號 printf '{\n' printf '\t"data":[\n' for key in ${!port[@]} do if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1` printf '\t {\n' printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"},\n" else [[ "${key}" -eq "((${#port[@]}-1))" ]] socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1` printf '\t {\n' printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"}\n" fi done printf '\t ]\n' printf '}\n' } $1
找到netstat 並且給許可權
which netstat | chmod +s
執行,看是否是json格式的
bash auto_found.sh redis
四.修改配置
新增配置檔案,第一個auto_found鍵值是獲取埠號,第二個redis_status是根據根據埠號訪問redis獲取info資訊
vim /etc/zabbix/zabbix_agentd.conf.d/redis_status.conf
UserParameter=auto_found[*],/bin/bash /etc/zabbix/script/auto_found.sh $1 UserParameter=redis_status[*],(/bin/echo info; sleep 1) | telnet 127.0.0.1 $1 2>&1 |grep $2|cut -d : -f2 | head -1
systemctl restart zabbix-agent
測試:
看是否返回和指令碼結構一樣的埠
zabbix_agentd -t auto_found[redis]
7000是redis埠,後面是監控項
zabbix_agentd -t redis_status[7000,used_cpu_sys]
服務端測試:
也是看返回是否和客戶端一樣
usr/local/zabbix/bin/zabbix_get -s 192.168.1.91 -k auto_found[redis]
usr/local/zabbix/bin/zabbix_get -s 192.168.1.91 -k redis_status[7000,used_cpu_sys]
五.服務端網頁操作(附件有配置好的模板)
1.選擇自動發現規則---建立發現規則
2.名字都可以,鍵值為自動發現的鍵值,更新間隔是60秒發現一次
3.再點選監控項原型–建立監控項,名稱的 {#REDISPORT} 為自動發現指令碼輸出得值,鍵值為監控鍵值,埠部分也是一樣的變數名
4.選擇後套用到主機上,到最新資料中,檢視redis是否獲得值,是否監控到多個埠