Redis监控运维 #
一、监控概述 #
1.1 为什么需要监控 #
text
Redis监控的重要性:
┌─────────────────────────────────────────────┐
│ 1. 性能监控 │
│ - 发现性能瓶颈 │
│ - 优化配置 │
│ │
│ 2. 故障预警 │
│ - 提前发现问题 │
│ - 避免故障 │
│ │
│ 3. 容量规划 │
│ - 了解资源使用 │
│ - 规划扩容 │
│ │
│ 4. 问题排查 │
│ - 定位问题原因 │
│ - 快速恢复 │
└─────────────────────────────────────────────┘
1.2 监控指标分类 #
text
Redis监控指标:
┌─────────────────────────────────────────────────────────┐
│ 1. 性能指标 │
│ - 响应时间 │
│ - QPS │
│ - 连接数 │
│ │
│ 2. 内存指标 │
│ - 内存使用量 │
│ - 内存碎片率 │
│ - 键数量 │
│ │
│ 3. 持久化指标 │
│ - RDB保存状态 │
│ - AOF重写状态 │
│ - 持久化错误 │
│ │
│ 4. 复制指标 │
│ - 主从状态 │
│ - 复制延迟 │
│ - 连接状态 │
│ │
│ 5. 集群指标 │
│ - 节点状态 │
│ - 槽位分布 │
│ - 故障状态 │
└─────────────────────────────────────────────────────────┘
二、INFO命令 #
2.1 INFO概述 #
bash
# 查看所有信息
INFO
# 查看特定模块信息
INFO server # 服务器信息
INFO clients # 客户端信息
INFO memory # 内存信息
INFO persistence # 持久化信息
INFO stats # 统计信息
INFO replication # 复制信息
INFO cpu # CPU信息
INFO cluster # 集群信息
INFO keypace # 键空间信息
2.2 服务器信息 #
bash
INFO server
# 重要指标:
# redis_version: Redis版本
# redis_mode: 运行模式
# os: 操作系统
# uptime_in_seconds: 运行时间(秒)
# uptime_in_days: 运行时间(天)
2.3 客户端信息 #
bash
INFO clients
# 重要指标:
# connected_clients: 已连接客户端数
# client_longest_output_list: 最大输出列表
# client_biggest_input_buf: 最大输入缓冲区
# blocked_clients: 阻塞客户端数
2.4 内存信息 #
bash
INFO memory
# 重要指标:
# used_memory: 已使用内存(字节)
# used_memory_human: 已使用内存(人类可读)
# used_memory_rss: 系统分配内存
# used_memory_peak: 内存使用峰值
# used_memory_lua: Lua脚本使用内存
# mem_fragmentation_ratio: 内存碎片率
# mem_allocator: 内存分配器
# 内存碎片率计算:
# mem_fragmentation_ratio = used_memory_rss / used_memory
# > 1: 有内存碎片
# < 1: Redis使用了交换内存(危险)
2.5 统计信息 #
bash
INFO stats
# 重要指标:
# total_connections_received: 总连接数
# total_commands_processed: 总命令数
# instantaneous_ops_per_sec: 当前QPS
# total_net_input_bytes: 总输入字节数
# total_net_output_bytes: 总输出字节数
# rejected_connections: 拒绝连接数
# expired_keys: 过期键数量
# evicted_keys: 淘汰键数量
# keyspace_hits: 缓存命中数
# keyspace_misses: 缓存未命中数
2.6 持久化信息 #
bash
INFO persistence
# 重要指标:
# rdb_last_save_time: 最后保存时间
# rdb_changes_since_last_save: 自上次保存后的变化
# rdb_bgsave_in_progress: RDB保存是否在进行
# rdb_last_bgsave_status: 最后RDB保存状态
# aof_enabled: AOF是否开启
# aof_rewrite_in_progress: AOF重写是否在进行
# aof_last_rewrite_time_sec: 上次AOF重写耗时
# aof_last_bgrewrite_status: 最后AOF重写状态
2.7 复制信息 #
bash
INFO replication
# 重要指标:
# role: 角色(master/slave)
# connected_slaves: 已连接从节点数
# master_repl_offset: 主节点复制偏移量
# slave_repl_offset: 从节点复制偏移量
# master_link_status: 主从连接状态
# master_last_io_seconds_ago: 距上次通信时间
三、慢查询日志 #
3.1 配置慢查询 #
bash
# redis.conf 配置
# 慢查询阈值(微秒)
slowlog-log-slower-than 10000 # 10毫秒
# 慢查询日志最大长度
slowlog-max-len 128
# 动态修改
CONFIG SET slowlog-log-slower-than 10000
CONFIG SET slowlog-max-len 128
3.2 查看慢查询 #
bash
# 查看慢查询日志
SLOWLOG GET
# 查看指定数量
SLOWLOG GET 10
# 输出格式:
# 1) 1) (integer) 1 # 日志ID
# 2) (integer) 1700000000 # 时间戳
# 3) (integer) 15000 # 执行时间(微秒)
# 4) 1) "KEYS" # 命令
# 2) "*"
# 5) "127.0.0.1:52341" # 客户端地址
# 6) "client-name" # 客户端名称
# 查看慢查询日志长度
SLOWLOG LEN
# 重置慢查询日志
SLOWLOG RESET
3.3 常见慢查询 #
text
常见慢查询命令:
1. KEYS *
- 扫描所有键
- 阻塞Redis
- 使用SCAN代替
2. HGETALL 大哈希
- 获取所有字段
- 数据量大时慢
- 分批获取
3. LRANGE 大列表
- 获取大量元素
- 使用LIMIT
4. SMEMBERS 大集合
- 获取所有元素
- 使用SSCAN
5. ZRANGE 大有序集合
- 获取大量元素
- 使用LIMIT
四、客户端监控 #
4.1 查看客户端 #
bash
# 查看客户端列表
CLIENT LIST
# 输出格式:
# id=1 addr=127.0.0.1:52341 fd=5 name= age=100 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
# 重要字段:
# id: 客户端ID
# addr: 客户端地址
# name: 客户端名称
# age: 连接时长(秒)
# idle: 空闲时长(秒)
# db: 当前数据库
# cmd: 最后执行的命令
# 查看当前客户端ID
CLIENT ID
# 查看当前客户端名称
CLIENT GETNAME
# 设置客户端名称
CLIENT SETNAME myapp
4.2 客户端管理 #
bash
# 关闭客户端连接
CLIENT KILL 127.0.0.1:52341
# 按ID关闭
CLIENT KILL ID 1
# 按类型关闭
CLIENT KILL TYPE normal
CLIENT KILL TYPE slave
CLIENT KILL TYPE pubsub
# 暂停客户端
CLIENT PAUSE 1000 # 暂停1秒
# 取消暂停
CLIENT UNPAUSE
五、监控工具 #
5.1 Redis-cli监控 #
bash
# 实时监控所有命令
redis-cli MONITOR
# 实时统计
redis-cli --stat
# 延迟监控
redis-cli --latency
# 延迟历史
redis-cli --latency-history
# 延迟分布
redis-cli --latency-dist
# 查找大键
redis-cli --bigkeys
# 查找内存占用大的键
redis-cli --memkeys
5.2 Prometheus + Grafana #
yaml
# Prometheus配置
scrape_configs:
- job_name: 'redis'
static_configs:
- targets: ['localhost:9121']
# 使用redis_exporter
docker run -d --name redis_exporter \
-p 9121:9121 \
oliver006/redis_exporter \
--redis.addr=redis://localhost:6379
5.3 Redis Insight #
text
Redis Insight功能:
- 可视化界面
- 实时监控
- 命令行工具
- 内存分析
- 慢查询分析
下载地址:
https://redis.com/redis-enterprise/redis-insight/
5.4 其他监控工具 #
text
其他监控工具:
1. RedisStat
- Ruby编写
- 实时监控
- 命令行工具
2. RedisLive
- Python编写
- Web界面
- 历史数据
3. Redis Commander
- Node.js编写
- Web界面
- 管理工具
4. Grafana + Prometheus
- 专业监控
- 告警功能
- 可视化
六、日志管理 #
6.1 配置日志 #
bash
# redis.conf 配置
# 日志级别
# debug: 大量信息
# verbose: 较多信息
# notice: 适量信息(推荐)
# warning: 仅重要信息
loglevel notice
# 日志文件位置
logfile /var/log/redis/redis-server.log
# 日志输出到syslog
syslog-enabled yes
syslog-ident redis
syslog-facility local0
6.2 日志分析 #
bash
# 查看日志
tail -f /var/log/redis/redis-server.log
# 搜索错误
grep "error" /var/log/redis/redis-server.log
# 搜索警告
grep "warning" /var/log/redis/redis-server.log
# 搜索慢查询
grep "slowlog" /var/log/redis/redis-server.log
七、告警配置 #
7.1 告警指标 #
text
Redis告警指标:
┌─────────────────────────────────────────────────────────┐
│ 指标 │ 告警阈值 │
├─────────────────────────────────────────────────────────┤
│ 内存使用率 │ > 80% │
│ 内存碎片率 │ > 1.5 或 < 1 │
│ 连接数 │ > maxclients的80% │
│ 响应时间 │ > 100ms │
│ 复制延迟 │ > 10s │
│ 持久化错误 │ > 0 │
│ 拒绝连接数 │ > 0 │
│ 键淘汰数 │ > 0 │
└─────────────────────────────────────────────────────────┘
7.2 Prometheus告警规则 #
yaml
# prometheus_rules.yml
groups:
- name: redis
rules:
- alert: RedisDown
expr: redis_up == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Redis is down"
- alert: RedisMemoryHigh
expr: redis_memory_used_bytes / redis_memory_max_bytes > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "Redis memory usage is high"
- alert: RedisConnectionsHigh
expr: redis_connected_clients > 8000
for: 5m
labels:
severity: warning
annotations:
summary: "Redis connections are high"
八、运维最佳实践 #
8.1 日常运维 #
bash
# 每日检查
1. 查看内存使用
INFO memory
2. 查看连接数
INFO clients
3. 查看慢查询
SLOWLOG GET 10
4. 查看持久化状态
INFO persistence
5. 查看复制状态
INFO replication
8.2 定期维护 #
bash
# 每周维护
1. 分析慢查询
SLOWLOG GET 100
2. 检查大键
redis-cli --bigkeys
3. 分析内存
redis-cli --memkeys
4. 检查日志
grep "error\|warning" /var/log/redis/redis-server.log
# 每月维护
1. 性能测试
redis-benchmark
2. 备份检查
验证备份文件可用
3. 版本更新
检查是否有安全更新
九、总结 #
监控命令:
| 命令 | 说明 |
|---|---|
| INFO | 查看服务器信息 |
| SLOWLOG | 慢查询日志 |
| CLIENT LIST | 客户端列表 |
| MONITOR | 实时监控 |
监控指标:
| 指标 | 说明 |
|---|---|
| used_memory | 内存使用 |
| connected_clients | 连接数 |
| instantaneous_ops_per_sec | QPS |
| mem_fragmentation_ratio | 内存碎片率 |
下一步,让我们学习Redis性能优化!
最后更新:2026-03-27