您的位置:首页 > 数据库 > Redis

简易实现Redis监控自动短信告警

2016-12-29 14:22 323 查看
转载地址:http://blog.itpub.net/29254281/viewspace-1203311/

如果没有企业短信网关,如何实现监控的自动短信告警呢?

1.开通QQ邮箱,并且绑定手机号。
设置之后,一旦QQ邮箱接收到新邮件,就会自动发送短信提醒。 http://jingyan.baidu.com/article/90808022a318b2fd91c80f9a.html
2.制作一个JAVA程序,可以接收请求,并将请求内容作为邮件发送到QQ邮箱。
   
3.在Redis服务器上进行脚本监控。如果监控超过阈值,则请求JAVA程序代发邮件。



#!
/bin/bash

logfile=/home/redis/redisdata/redis_monitor.log

serverip='127.0.0.1'

redisport=6379

slave_target=1

mem_target=0.5

cpu_target=0.5

alert_url='http://IP:port/servlet?to=dba&title=RedisError('$serverip')&content='

error_msg=''

echo $(date)
>> $logfile

pid=$(ps
-ef
| grep redis-server
| grep
-v grep
| awk
'{print $2}')

if
[
"$pid"
= ''
]
; then

    echo
"[ERROR]Redis is shutdown"
>>$logfile

    error_msg=$error_msg"+Redis_is_shutdown"

else

    echo
"[INFO]pid:$pid"
>>$logfile

    maxmemory=$(redis-cli
-p $redisport config
get maxmemory
| awk
'NR==2
{print $1}')

    used_memory=$(redis-cli
-p $redisport info memory
| grep used_memory:
| awk
-F
:
'{print $2}'
| sed
's/\r//g')

    mem_ratio=$(awk
'BEGIN
{printf("%.2f",'$used_memory'/'$maxmemory')}')

    if
[ $(echo
"scale=2;$mem_ratio>$mem_target"
| bc)
-eq 1
]
;
then

        echo
"[ERROR]used_memory:$used_memory"
>>$logfile

        echo
"[ERROR]mem_used_ratio:$mem_ratio"
>> $logfile

        error_msg=$error_msg"+mem_target#$mem_target"

        error_msg=$error_msg"+used_memory#$used_memory"

        error_msg=$error_msg"+mem_used_ratio#$mem_ratio"

    else

        echo
"[INFO]used_memory:$used_memory"
>>$logfile

        echo
"[INFO]mem_used_ratio:$mem_ratio"
>> $logfile

    fi

    

    cpu_ratio=$(top
-b
-p $pid
-n 1
| grep $pid
| awk
'/redis-server/{print
$9}'
| sed
's/\r//g')

    if
[ $(echo
"scale=2;($cpu_ratio/100)>$cpu_target"
|bc)
-eq 1
]
;
then

        echo
"[ERROR]cpu_ratio:$cpu_ratio"
>> $logfile

        error_msg=$error_msg"+cpu_target#$(echo
"$cpu_target*100"
| bc)"

        error_msg=$error_msg"+cpu_ratio#$cpu_ratio"

    else

        echo
"[INFO]cpu_ratio:$cpu_ratio"
>> $logfile

    fi

    slave_count=$(redis-cli
-p $redisport info replication
| awk
-F
:
'/connected_slaves:/{print
$2}'
| sed
's/\r//g')

    if
[ $slave_count
-ne $slave_target
]
;
then

        echo
"[ERROR]slave:$slave_count"
>> $logfile

        error_msg=$error_msg"+slave_target#$slave_target"

        error_msg=$error_msg"+slave#$slave_count"

    else

        echo
"[INFO]slave:$slave_count"
>> $logfile

    fi

fi

if
[
"$error_msg"
!=
''
]
; then

    curl $alert_url$error_msg

fi

Shell脚本确实写着费劲

它还居然没有浮点运算

有两个方式可以实现浮点运算。

1.$(awk 'BEGIN {printf("%.2f",'$used_memory'/'$maxmemory')}')

2.$(echo "scale=2;$mem_ratio>$mem_target" | bc)

另外需要注意的是,top命令的结果默认是乱码,不能使用awk运算



使用top -b 参数就可以解决这个问题了



将这个脚本添加到crontab以一个间隔运行。
这样就实现了简易的Redis监控自动短信告警功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: