1. 程式人生 > 其它 >zabbix監控redis叢集lld

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是否獲得值,是否監控到多個埠

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。