一、启动redis-server
cd /data/redis
redis-server redis.conf (根据自己的环境启动redis)
测试脚本(写入1000个数据):
seq 1000|while read line; do redis-cli set key_${line} value_${line}; done
二、redis-cli info查看redis的运行信息
used_memory_rss #占用系统的内存
used_memory #key所占用的内存
mem_fragmentation_ratio #内存碎片化率used_memory_rss/used_memory
connected_clients #已连接的客户端
total_commands_processed #从启动开始运行了多少命令
total_connections_received #从启动开始接收了多个连接
role #redis主从状态
redis-cli info|grep total_commands_processed
三、监控redis脚本(vim /usr/local/zabbix/check_redis.sh)
#!/bin/sh
while getopts "p:k:P:" opt
do
case $opt in
p ) redis_port=$OPTARG;;
k ) info_key=$OPTARG;;
P ) redis_passwd=$OPTARG;;
? )
echo 'parameter is wrong!'
exit 1;;
esac
done
if [ ! "${redis_port}" ] || [ ! "${info_key}" ];then
echo "parameter is null"
exit 1
fi
if [ "${redis_passwd}" ];then
result=`/usr/local/bin/redis-cli -a ${redis_passwd} -p ${redis_port} info|grep "${info_key}:"|cut -d: -f2`
else
result=`/usr/local/bin/redis-cli -p ${redis_port} info|grep "${info_key}:"|cut -d: -f2`
fi
echo $result
四、测试脚本
无密码测试
sh /usr/local/zabbix/check_redis.sh -k mem_fragmentation_ratio -p 6379
sh /usr/local/zabbix/check_redis.sh -k total_commands_processed -p 6379
有密码测试
config set requirepass "test"
auth test
sh /usr/local/zabbix/check_redis.sh -k total_commands_processed -p 6379 -P test
去除密码
auth test
config set requirepass ""
五、zabbix agent的配置(vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/redis.conf)
UserParameter=redis.status[*],sh /usr/local/zabbix/check_redis.sh -k $1 -p $2
4.1 如果有密码的话(test替换自己的密码)
UserParameter=redis.status[*],sh /usr/local/zabbix/check_redis.sh -k $1 -p $2 -P test
重启zabbix agentd。
六、测试zabbix_agent是否正常
/usr/local/zabbix/sbin/zabbix_agentd -t redis.status[mem_fragmentation_ratio,6379]
/usr/local/zabbix/sbin/zabbix_agentd -t redis.status[total_commands_processed,6379]
zabbix_get -s 192.168.1.106 -k redis.status[mem_fragmentation_ratio,6379]
七、在zabbix server网页上配置监控
6.1 添加主机
6.2 添加监控项目
简单检查 net.tcp.service.perf[tcp,,6379] #浮点数 触发器为0时告警 图形
redis.status[used_memory_rss,6379] #整数
redis.status[used_memory,6379] #整数
redis.status[mem_fragmentation_ratio,6379] #浮点数 redis内存碎片化率
redis.status[connected_clients,6379] #整数
redis.status[total_commands_processed,6379] #每秒速率 整数 redis每秒钟执行的命令(qps)
redis.status[total_connections_received,6379] #每秒速率 整数
6.3 模板说明
自动发现redis端口(discover_redis.py)
#coding:utf-8
import json
import commands
(status, output) = commands.getstatusoutput("""sudo netstat -tlnp|grep 'redis'|awk '{print $4}'|awk -F':' '{print $(NF)}'|sort -u|grep -v '^1'""")
outputs = output.split('\n')
ports = []
for port in outputs:
ports += [{'{#REDISPORT}': port}]
print json.dumps({'data':ports},sort_keys=True,indent=4)
自动发现zabbix配置:
UserParameter=redis.discover,python /usr/local/zabbix/discover_redis.py