共计 2652 个字符,预计需要花费 7 分钟才能阅读完成。
如果没有企业短信网关,Redis 如何实现监控的自动短信告警呢?
1. 开通 QQ 邮箱, 并且绑定手机号。
设置之后,一旦 QQ 邮箱接收到新邮件,就会自动发送短信提醒。
http://jingyan.baidu.com/article/90808022a318b2fd91c80f9a.html
2. 制作一个 Java 程序, 可以接收请求, 并将请求内容作为邮件发送到 QQ 邮箱。
3. 在 Redis 服务器上进行脚本监控。如果监控超过阈值, 则请求 JAVA 程序代发邮件。
Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm
Redis 集群明细文档 http://www.linuxidc.com/Linux/2013-09/90118.htm
Ubuntu 12.10 下安装 Redis(图文详解)+ Jedis 连接 Redis http://www.linuxidc.com/Linux/2013-06/85816.htm
Redis 系列 - 安装部署维护篇 http://www.linuxidc.com/Linux/2012-12/75627.htm
CentOS 6.3 安装 Redis http://www.linuxidc.com/Linux/2012-12/75314.htm
Redis 配置文件 redis.conf 详解 http://www.linuxidc.com/Linux/2013-11/92524.htm
- #! /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 监控自动短信告警功能。
Redis 的详细介绍 :请点这里
Redis 的下载地址 :请点这里