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