zabbix自動發現監控redis數據庫與自動發現mongo,mysql的思路差不多。這次彙總完就把模板,腳本上傳到git上。如果公司使用的redis都是6379端口的話,那麼還是建議創建一套模板,然後鏈接到各個服務器即可。如果公司的redis使用的端口比較多,各個都不一樣,那還是自動發現並監控redis比較方便。還是一樣,先來看下監控的效果圖:
上述圖形是使用zabbix的篩選功能彙總在一起的圖片。監控redis的客戶端連接數,使用的內存,實際使用的內存和redis的內存碎片化情況。
下面來講講自動發現redis的實現,首先,還是先看下redis自動發現的配置:
探索規則配置完後,同樣的在zabbix agentd端需要添加如下配置然後重啓zabbix_agentd,配置如下:
UserParameter=redis.discover,python /usr/local/zabbix/discover_redis.py
其中/usr/local/zabbix/discover_redis.py自動發現的腳本內容如下 :
#coding:utf-8
import json
import commands
(status, output) = commands.getstatusoutput('''sudo netstat -tlnp|grep 'redis-server'|awk '{print $4}'|awk -F':' '{print $(NF)}'|sort -u''')
outputs = output.split('\n')
ports = []
for port in outputs:
ports += [{'{#REDISPORT}': port}]
print json.dumps({'data':ports},sort_keys=True,indent=4)
同樣的,還是使用netstat發現正在監聽的端口,visudo的權限也是需要加入netstat的權限。visudo添加如下:
zabbix ALL= NOPASSWD: /bin/netstat
Defaults:zabbix !requiretty
探索完端口後,zabbix server就會以端口爲參數向zabbix agentd獲取數據,其中項目原型配置如下:
其中redis.status的鍵值需要在zabbix agentd客戶端進行配置,配置如下:
UserParameter=redis.status[*],sh /usr/local/zabbix/check_redis.sh -k $1 -p $2 (如果有密碼的話,加個-P參數,例如-P 'xxxx')
獲取redis數據的/usr/local/zabbix/check_redis.sh腳本如下,其中-k表示獲取redis info的哪個值,-p表示端口,如果redis有密碼的話,-P參數也需要傳入。
#!/bin/sh
while getopts "p:k:P:" opt
do
case $opt in
p ) redis_port=$OPTARG;;
k ) info_key=$OPTARG;;
P ) redis_passwd=$OPTARG;;
? )
echo 'parameter is wrong!'
exit 1;;
esac
done
if [ ! "${redis_port}" ] || [ ! "${info_key}" ];then
echo "parameter is null"
exit 1
fi
if [ "${redis_passwd}" ];then
result=`/usr/local/bin/redis-cli -a ${redis_passwd} -p ${redis_port} info|grep "${info_key}:"|cut -d: -f2`
else
result=`/usr/local/bin/redis-cli -p ${redis_port} info|grep "${info_key}:"|cut -d: -f2`
fi
echo $result
通過以上的配置,就能實現自動發現並監控redis了,監控完把數據添加到篩選裏面,就能得到如圖1的那張數據圖。
最後附上本人的網絡課堂地址,如有興趣請點擊: 實踐哥
模板見:https://git.oschina.net/zhuangweihong/ops