简易实现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监控自动短信告警功能。
如果没有企业短信网关,如何实现监控的自动短信告警呢?
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监控自动短信告警功能。
相关文章推荐
- python实现自动监控网站并发送邮件告警
- Android实战简易教程-第三十六枪(监听短信-实现短信验证码自动填入)
- Android实战简易教程<三十六>(监听短信-实现短信验证码自动填入)
- python实现自动监控网站并发送邮件告警 推荐
- 一个简易的QQ自动消息机的实现
- android广播实现短信窃听器和开机自动启动activity
- CentOS 5.2安装nagios实现短信告警
- 利用Nagios 实现监控Linux/Windows及短信报警的总结
- nagios监控linux主机、web等各种服务,并实现飞信自动报警
- UBUNTU9.10安装nagios监控软件实现手机短信通知
- rsync实现dropbox-like目录监控自动同步
- 利用Nagios 实现监控Linux/Windows及短信报警的总结
- nagios监控linux主机、web等各种服务,并实现飞信自动报警
- Shell实现进程的自动监控
- asp实现新评论自动发短信提示的代码
- naigos实现监控.短信报警
- shell脚本监控网站并实现邮件、短信报警
- 利用一键飞信实现开机自动短信通知指定号码
- Linux服务器系统监控框架与MSN、E-mail、手机短信报警的实现