redis自身的info可以读出自身的内存使用情况,通过config get可读出你所设置的内存最大值。故可通过这两点,对redis内存使用情况进行监控。以下脚本考虑了四种输出可能:正常,警告,严重警告,和错误(未设置内存最大值)。
nagios有四个返回值,分别是0:正常,1:警告,2:严重警告,3:未知。在此使用了,0,1,2。
该脚本一般情况下可正常使用,但今天折腾了下午,在nagios中一直显示错误,为此,我还一直以为nagios配置文件弄错了,查阅了较多的资料,均没找到解决方案,一直没想到是否该脚本出现了问题,毕竟该shell脚本source结果是正确的,后来无意中又看了下此脚本,与监控显示的内容,感觉对不上,就开始考虑此脚本是否有问题(解决思路就不说了)。最终的解决方案是把redis-cli改成绝对路径,此时输出正确,之后的修改方向通过给出参数进行监控,此版本相对简陋,问题有,也在所难免。
#!/bin/bash
#
#
NORMAL_MSG="redis_memory is OK!"
WARONG_MSG="redis_memory is WARONG!!"
CRITICAL_MSG="redis_memory is CRITICAL!!!"
ERROR_MSG="max_redis_memory is 0"
WARONG_NUM=70
CRITICAL_NUM=80
max_redis_memory=`echo 'config get maxmemory' | redis-cli | grep -v 'maxmemory'`
used_redis_memory=`redis-cli info | grep 'used_memory' | egrep -v 'used_memory_' | awk -F ":" '{print $2}'`
#echo $max_redis_memory
#echo $used_redis_memory
if [[ $max_redis_memory -ne 0 ]];then
percent_redis_memory=`awk 'BEGIN{printf "%d\n",'$used_redis_memory'/'$max_redis_memory'*100}'`
# echo $percent_redis_memory
if [ $percent_redis_memory -ge $CRITICAL_NUM ];then
echo "CRITICAL!!! ${CRITICAL_MSG} value is ${percent_redis_memory}"
exit 2
elif [[ $percent_redis_memory -ge $WARONG_NUM ]];then
echo "WARONG!!! ${WARONG_MSG} value is ${percent_redis_memory}"
exit 1
else
echo "NORMAL ${NORMAL_MSG} value is ${percent_redis_memory}"
exit 0
fi
else
echo "ERROR!!! ${ERROR_MSG}"
exit 2
fi