redis内存告警

本示例使用企业微信的机器人进行告警,可以根据实际情况选择,比如钉钉群组机器人

 

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export PATH

rm -rf redis_mem.log
#设置已使用内存百分比,大于等于该值则告警
#alter_num=14
alter_num=75

redis_ip=$(ip a | grep 192.168 | grep -v secondary | awk '{print $2}' | awk -F'/' '{print $1}')

ps -ef |grep redis-server |grep -v grep | awk '$NF~/cluster/{print $(NF-1);next}{print $NF}' |awk -F':' '{print $2}' >redis_ports

#printf '%-25s\t %-10s\t %-10s\t %-10s\n' redis_ip:port used_memory max_memory used_memory_pct
for i in `cat redis_ports`
do
   check_time=$(date +"%F-%T")
   redis-cli -h $redis_ip -p $i info > info.log
   used_mem=$(grep -w 'used_memory' info.log | awk -F':' '{print $2}' | sed 's/\r//')
   max_mem=$(grep -w 'maxmemory' info.log | awk -F':' '{print $2}' | sed 's/\r//')
   used_memory_human=$(grep -w 'used_memory_human' info.log | awk -F':' '{print $2}' | sed 's/\r//')
   maxmemory_human=$(grep -w 'maxmemory_human' info.log | awk -F':' '{print $2}' | sed 's/\r//')
   used_memory_pct=$(awk 'BEGIN{printf "%.2f\n",('$used_mem'/'$max_mem')*100}')
   #role=$(grep role info.log | awk -F':' '{print $2}' | sed 's/\r//')
   #printf '%-25s\t %-10s\t %-10s\t %-10s\n' $redis_ip:$i $used_memory_human $maxmemory_human $used_memory_pct
   
   if [[ $(echo "$used_memory_pct >= $alter_num" | bc) = 1 ]];then
		#填写自己正确的机器人链接
		curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx' \
		-H 'Content-Type: application/json' \
		-d '
		{
			"msgtype": "text",
			"text": {
					"content": "【'$check_time'redis内存告警】\nredis实例:'$redis_ip:$i'\n最大内存:'$maxmemory_human'\n已用内存:'$used_memory_human'\n内存使用率:'$used_memory_pct'%",
					"mentioned_list":["xiaodongl"]
					}
		}'
   fi
done

  

添加crontab定时任务

*/5 * * * * sh /root/redis_scripts/redis_mem_alert.sh &>/dev/null 2>&1

 

设置告警阈值14%测试

posted @ 2021-05-26 17:01  knowledge-is-power  阅读(201)  评论(0编辑  收藏  举报