一、准备工作
1. 环境要求
- Zabbix Server 5.0+
- Redis 7.x
- Zabbix Agent 5.0+
2. 安装Redis(如未安装)
# Ubuntu/Debian
sudo apt update
sudo apt install redis-server
# CentOS/RHEL
sudo yum install epel-release
sudo yum install redis
# 启动Redis
sudo systemctl start redis
sudo systemctl enable redis
二、方法一:使用Zabbix官方模板
1. 导入模板
下载官方Redis模板:
- 访问 Zabbix官网
- 搜索 "Redis" 或直接下载模板
Zabbix Web界面导入:
配置 → 模板 → 导入 → 选择XML文件 → 导入
2. 配置Redis允许监控
编辑Redis配置文件:
sudo vim /etc/redis/redis.conf
修改以下配置:
# 允许远程连接(如果是本地监控可跳过)
bind 0.0.0.0
# 设置密码(可选但推荐)
requirepass yourpassword
# 取消保护模式
protected-mode no
重启Redis:
sudo systemctl restart redis
3. 配置Zabbix Agent
创建Redis监控脚本目录:
sudo mkdir -p /etc/zabbix/scripts
sudo mkdir -p /etc/zabbix/zabbix_agentd.d
创建监控脚本:
sudo vim /etc/zabbix/scripts/redis_monitor.sh
内容如下:
#!/bin/bash
# Zabbix Redis监控脚本
REDIS_CMD="/usr/bin/redis-cli"
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
REDIS_PASS="yourpassword" # 如果没有密码,删除这一行
# 获取Redis信息函数
get_redis_info() {
if [ -n "$REDIS_PASS" ]; then
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS info | grep "^$1:" | cut -d: -f2
else
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT info | grep "^$1:" | cut -d: -f2
fi
}
case $1 in
ping)
if [ -n "$REDIS_PASS" ]; then
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS ping | grep -c PONG
else
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT ping | grep -c PONG
fi
;;
connected_clients)
get_redis_info connected_clients
;;
used_memory)
get_redis_info used_memory
;;
used_memory_rss)
get_redis_info used_memory_rss
;;
total_connections_received)
get_redis_info total_connections_received
;;
total_commands_processed)
get_redis_info total_commands_processed
;;
keyspace_hits)
get_redis_info keyspace_hits
;;
keyspace_misses)
get_redis_info keyspace_misses
;;
uptime_in_seconds)
get_redis_info uptime_in_seconds
;;
*)
echo "Unknown parameter: $1"
exit 1
;;
esac
设置权限:
sudo chmod +x /etc/zabbix/scripts/redis_monitor.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/redis_monitor.sh
4. 创建Zabbix Agent配置文件
sudo vim /etc/zabbix/zabbix_agentd.d/redis.conf
内容如下:
# Redis监控配置
UserParameter=redis.status[*],/etc/zabbix/scripts/redis_monitor.sh $1
UserParameter=redis.ping,/etc/zabbix/scripts/redis_monitor.sh ping
UserParameter=redis.connected_clients,/etc/zabbix/scripts/redis_monitor.sh connected_clients
UserParameter=redis.used_memory,/etc/zabbix/scripts/redis_monitor.sh used_memory
UserParameter=redis.used_memory_rss,/etc/zabbix/scripts/redis_monitor.sh used_memory_rss
重启Zabbix Agent:
sudo systemctl restart zabbix-agent
5. 测试Agent配置
# 测试连通性
sudo su - zabbix -s /bin/bash
zabbix_get -s 127.0.0.1 -k "redis.ping"
# 测试获取指标
zabbix_get -s 127.0.0.1 -k "redis.used_memory"
三、方法二:使用自定义监控项(推荐)
1. 创建更完善的监控脚本
sudo vim /etc/zabbix/scripts/redis_stats.sh
#!/bin/bash
# Redis详细监控脚本
HOST="127.0.0.1"
PORT="6379"
PASSWORD="yourpassword" # 如果没有则留空
REDIS_CLI=$(which redis-cli)
if [ -z "$REDIS_CLI" ]; then
echo "redis-cli not found"
exit 1
fi
# 构建认证参数
AUTH_PARAM=""
if [ -n "$PASSWORD" ]; then
AUTH_PARAM="-a $PASSWORD"
fi
# 获取指标
case $1 in
"discovery")
# 自动发现Redis键空间(数据库)
databases=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT info keyspace | grep "^db")
echo '{"data":['
first=1
echo "$databases" | while read line; do
db=$(echo $line | cut -d: -f1)
if [ $first -eq 1 ]; then
first=0
else
echo ","
fi
echo -n '{"{#DBNAME}":"'$db'"}'
done
echo ']}'
;;
"info")
# 获取特定指标
metric=$2
result=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT info | grep "^$metric:" | cut -d: -f2)
echo $result
;;
"slowlog")
# 获取慢查询数量
count=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT slowlog len)
echo $count
;;
"db_stats")
# 获取数据库统计
db=$2
stats=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT info keyspace | grep "^$db:")
echo $stats
;;
*)
echo "Usage: $0 {discovery|info metric|slowlog|db_stats db}"
exit 1
;;
esac
2. 配置Zabbix Agent
sudo vim /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf
# Redis自动发现
UserParameter=redis.discovery,/etc/zabbix/scripts/redis_stats.sh discovery
# Redis基本信息监控
UserParameter=redis.info[*],/etc/zabbix/scripts/redis_stats.sh info $1
UserParameter=redis.ping,/etc/zabbix/scripts/redis_stats.sh info ping 2>/dev/null || echo 0
UserParameter=redis.slowlog.count,/etc/zabbix/scripts/redis_stats.sh slowlog
# 数据库特定监控
UserParameter=redis.db.keys[*],/etc/zabbix/scripts/redis_stats.sh info $1 | grep -o "keys=[0-9]*" | cut -d= -f2
UserParameter=redis.db.expires[*],/etc/zabbix/scripts/redis_stats.sh info $1 | grep -o "expires=[0-9]*" | cut -d= -f2
3. 在Zabbix Web界面配置
步骤1:创建主机
进入
配置 → 主机 → 创建主机
填写:
- 主机名称:Redis-Server
- 可见名称:Redis Server
- 群组:Linux servers 或新建 Redis servers
- Agent接口:添加Redis服务器的IP和端口10050
步骤2:链接模板
在主机配置中找到
模板 标签
链接模板:选择
Template DB Redis(如果已导入)
或手动创建监控项
步骤3:创建监控项(如果没有模板)
创建基础监控项示例:
| 名称 |
键值 |
信息类型 |
单位 |
|---|
| Redis Ping |
redis.ping |
数字(无符号) |
|
| Redis连接数 |
redis.info[connected_clients] |
数字(无符号) |
|
| Redis内存使用 |
redis.info[used_memory] |
数字(无符号) |
B |
| Redis命中率 |
redis.info[keyspace_hits] |
数字(无符号) |
|
| Redis QPS |
redis.info[total_commands_processed] |
数字(无符号) |
ops |
步骤4:创建触发器
创建重要告警触发器:
Redis服务宕机
名称:Redis服务不可用
表达式:{Redis-Server:redis.ping.max(#3)}=0
严重性:灾难
内存使用过高
名称:Redis内存使用超过阈值
表达式:{Redis-Server:redis.info[used_memory].last()}>1000000000 # 1GB
严重性:严重
连接数过多
名称:Redis连接数过多
表达式:{Redis-Server:redis.info[connected_clients].last()}>1000
严重性:警告
步骤5:创建图形
内存使用图
- 添加:used_memory, used_memory_rss, used_memory_peak
性能图
- 添加:total_commands_processed, keyspace_hits, keyspace_misses
连接图
- 添加:connected_clients, blocked_clients
四、监控指标说明
关键性能指标:
内存相关
- used_memory:已使用内存
- used_memory_rss:系统分配内存
- mem_fragmentation_ratio:内存碎片率
连接相关
- connected_clients:客户端连接数
- rejected_connections:拒绝连接数
性能相关
- instantaneous_ops_per_sec:每秒操作数
- total_commands_processed:总命令处理数
持久化相关
- rdb_last_save_time:上次RDB保存时间
- aof_current_size:AOF文件大小
副本相关(如果有集群)
- master_link_status:主从连接状态
- slave_repl_offset:复制偏移量
五、故障排查
常见问题及解决:
权限问题
# 确保zabbix用户有权限执行脚本
sudo chmod 755 /etc/zabbix/scripts/*
sudo chown zabbix:zabbix /etc/zabbix/scripts/*
连接测试
# 测试Redis连接
redis-cli -h 127.0.0.1 -p 6379 ping
# 测试Agent获取数据
zabbix_get -s 127.0.0.1 -k "redis.info[used_memory]"
查看日志
# Zabbix Agent日志
tail -f /var/log/zabbix/zabbix_agentd.log
# Redis日志
tail -f /var/log/redis/redis-server.log
六、优化建议
调整监控频率
设置历史数据保留
配置告警升级
- 一级告警:邮件通知
- 二级告警:短信通知
- 三级告警:电话通知
使用LLD自动发现
- 自动发现Redis数据库
- 动态监控每个数据库的键数量
这样你就完成了Zabbix 5.0监控Redis 7的全过程。系统会持续监控Redis的健康状态,并在出现问题时及时告警。