通过redis自带的info命令来监控redis的健康状态,通过redis-cli PING命令来监控redis的存活状态。

附件中有监控模板,将监控脚本放在redis服务器的自定义的/scripts/zabbix_redis/下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#! /bin/bash
#Name: redismontior.sh
REDISCLI= "/usr/bin/redis-cli"
HOST= "127.0.0.1"
PORT=6379
if  [[ $ # == 1 ]];then
     case  $1  in
         version)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "redis_version"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         uptime)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "uptime_in_seconds"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         connected_clients)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "connected_clients"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         blocked_clients)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "blocked_clients"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_memory)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_memory"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_memory_rss)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_memory_rss"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_memory_peak)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_memory_peak"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_memory_lua)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_memory_lua"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_cpu_sys)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_cpu_sys"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_cpu_user)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_cpu_user"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_cpu_sys_children)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_cpu_sys_children"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         used_cpu_user_children)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "used_cpu_user_children"  awk  -F ':'  '{print $2}' `
             echo  $result
         ;;
         rdb_last_bgsave_status)
             result=`$REDISCLI -h $HOST -p $PORT info  |  grep  -w  "rdb_last_bgsave_status"  awk  -F ':'  '{print $2}'  grep  -c ok`
             echo  $result
         ;;
         aof_last_bgrewrite_status)
             result=`$REDISCLI -h $HOST -p $PORT info  |  grep  -w  "aof_last_bgrewrite_status"  awk  -F ':'  '{print $2}'  grep  -c ok`
             echo  $result
         ;;
         aof_last_write_status)
             result=`$REDISCLI -h $HOST -p $PORT info  |  grep  -w  "aof_last_write_status"  awk  -F ':'  '{print $2}'  grep  -c ok`
             echo  $result
         ;;
         *)
             echo  -e  "\033[33mUsage: $0 {connected_clients|blocked_clients|used_memory|used_memory_rss|used_memory_peak|used_memory_lua|used_cpu_sys|used_cpu_user|used_cpu_sys_children|used_cpu_user_children|rdb_last_bgsave_status|aof_last_bgrewrite_status|aof_last_write_status}\033[0m" 
         ;;
     esac
elif  [[ $ # == 2 ]];then
     case  $2  in
         keys)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "$1"  grep  -w  "keys"  awk  -F '=|,'  '{print $2}' `
             echo  $result
         ;;
         expires)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "$1"  grep  -w  "keys"  awk  -F '=|,'  '{print $4}' `
             echo  $result
         ;;
         avg_ttl)
             result=`$REDISCLI -h $HOST -p $PORT info |  grep  -w  "$1"  grep  -w  "avg_ttl"  awk  -F '=|,'  '{print $6}' `
             echo  $result
         ;;
         *)
             echo  -e  "\033[33mUsage: $0 {db0 keys|db0 expires|db0 avg_ttl}\033[0m" 
         ;;
     esac
fi


zabbix参数key的设置:

1
2
3
4
# cat /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf 
 
UserParameter=Redis.Status, redis-cli PING| grep  -c  "PONG"
UserParameter=Redis.Info[*],  /bin/sh  /scripts/zabbix_redis/zabbix_redis .sh $1

模板见附件.其中对脚本传入两个参数的部分,对于不同的环境可能会不太兼容,可以对模板和脚本进行修改,或者直接在模板中禁用对应的item。