Skip to content

Redis 监控指标参考

Redis 监控指标是评估 Redis 服务性能、稳定性和健康状态的重要依据。本文档提供了 Redis 核心监控指标的详细参考,包括指标含义、单位、正常范围、监控建议和获取方式,帮助运维人员更好地监控和优化 Redis 服务。

指标分类

Redis 监控指标可以分为以下几大类:

  • 性能指标:评估 Redis 服务的性能表现
  • 内存指标:监控 Redis 内存使用情况
  • 复制指标:监控主从复制状态
  • 持久化指标:监控 RDB 和 AOF 持久化状态
  • 客户端指标:监控客户端连接和请求情况
  • 命令统计指标:统计 Redis 命令执行情况
  • 服务器指标:监控 Redis 服务器自身状态
  • 集群指标:监控 Redis Cluster 状态

性能指标

1. 命令执行性能

指标名称指标类型单位含义正常范围监控建议
instantaneous_ops_per_sec性能次/秒每秒执行的命令数根据业务需求而定,一般为数千到数万监控峰值和趋势,突然下降可能表示服务异常
total_commands_processed累计自启动以来处理的命令总数-用于计算长期平均 QPS
total_connections_received累计自启动以来接收的客户端连接总数-用于分析连接趋势
instantaneous_input_kbps网络KB/s每秒网络输入流量根据业务需求而定监控突发流量,避免网络瓶颈
instantaneous_output_kbps网络KB/s每秒网络输出流量根据业务需求而定监控突发流量,避免网络瓶颈

2. 延迟指标

指标名称指标类型单位含义正常范围监控建议
latency性能毫秒命令执行延迟一般 < 1 毫秒使用 redis-cli --latency 命令监控,高延迟可能表示服务过载或存在慢查询
slowlog_log_slower_than配置微秒慢查询阈值一般设置为 10000 微秒(10 毫秒)根据业务需求调整,监控慢查询日志
slowlog_max_len配置慢查询日志最大长度一般设置为 128-1024 条确保有足够空间存储慢查询日志

内存指标

1. 内存使用情况

指标名称指标类型单位含义正常范围监控建议
used_memory内存字节Redis 分配器分配的内存总量根据 maxmemory 配置而定监控使用率,避免内存溢出
used_memory_rss内存字节Redis 进程占用的物理内存总量理想情况下接近 used_memoryused_memory_rss / used_memory 比值应 < 1.5,过高表示内存碎片严重
used_memory_peak内存字节Redis 内存使用的峰值根据 maxmemory 配置而定监控峰值,评估内存增长趋势
used_memory_dataset内存字节数据占用的内存量根据业务数据量而定used_memory 的比例应 > 50%,否则可能存在内存碎片或内存泄漏
used_memory_lua内存字节Lua 脚本引擎占用的内存一般很小,< 1MB过大可能表示 Lua 脚本存在问题
mem_fragmentation_ratio内存比值内存碎片率(used_memory_rss / used_memory1.0-1.5> 1.5 表示内存碎片严重,< 1.0 可能存在内存交换

2. 内存配置

指标名称指标类型单位含义正常范围监控建议
maxmemory配置字节Redis 最大使用内存根据服务器内存配置而定一般设置为服务器内存的 70%-80%
maxmemory_policy配置字符串内存淘汰策略根据业务需求而定常见策略:allkeys-lruvolatile-lrunoeviction
maxmemory_samples配置LRU 算法采样数量一般为 5-10影响 LRU 算法的准确性和性能

复制指标

1. 主节点复制状态

指标名称指标类型单位含义正常范围监控建议
connected_slaves状态连接的从节点数量根据部署架构而定与预期数量不符可能表示从节点故障
master_replid标识字符串主节点的唯一标识符-变化表示主节点重启或故障转移
master_repl_offset偏移量字节主节点的复制偏移量-用于与从节点偏移量比较,评估复制延迟
repl_backlog_active状态布尔值复制积压缓冲区是否激活1(激活)0 表示未激活,可能导致频繁全量复制
repl_backlog_size配置字节复制积压缓冲区大小一般为 1MB-10MB根据主节点写入量调整,避免频繁全量复制
repl_backlog_first_byte_offset偏移量字节复制积压缓冲区中第一个字节的偏移量-用于计算缓冲区覆盖范围
repl_backlog_histlen长度字节复制积压缓冲区中当前存储的字节数< repl_backlog_size接近 repl_backlog_size 表示缓冲区即将满

2. 从节点复制状态

指标名称指标类型单位含义正常范围监控建议
role状态字符串节点角色(master/slave)-用于确认节点角色
master_host配置字符串主节点 IP 地址-用于确认主从关系
master_port配置端口主节点端口-用于确认主从关系
master_link_status状态字符串主从连接状态(up/down)updown 表示主从连接断开
master_last_io_seconds_ago时间上次与主节点通信的时间< 10 秒> 30 秒表示主从连接可能存在问题
master_sync_in_progress状态布尔值是否正在进行主从同步0(未进行)1 表示正在进行全量复制
slave_repl_offset偏移量字节从节点的复制偏移量接近 master_repl_offsetmaster_repl_offset 的差值表示复制延迟
slave_priority配置整数从节点优先级1-100用于故障转移时选择新主节点,值越小优先级越高
slave_read_only配置布尔值是否为只读模式1(只读)从节点建议保持只读
master_sync_left_bytes同步字节全量复制剩余字节数-用于监控全量复制进度

持久化指标

1. RDB 持久化指标

指标名称指标类型单位含义正常范围监控建议
rdb_last_save_time时间时间戳上次 RDB 保存的时间戳-用于检查 RDB 保存频率
rdb_changes_since_last_save计数自上次 RDB 保存以来的写命令数根据 save 配置而定接近 save 配置阈值时可能触发 RDB 保存
rdb_bgsave_in_progress状态布尔值是否正在执行 BGSAVE 命令0(未执行)1 表示正在执行 RDB 持久化
rdb_last_bgsave_status状态字符串上次 BGSAVE 命令的执行状态(ok/err)okerr 表示 RDB 持久化失败
rdb_last_bgsave_time_sec时间上次 BGSAVE 命令的执行时间< 300 秒过长表示 RDB 持久化效率低
rdb_current_bgsave_time_sec时间当前 BGSAVE 命令的执行时间-用于监控正在进行的 RDB 持久化进度

2. AOF 持久化指标

指标名称指标类型单位含义正常范围监控建议
aof_enabled状态布尔值是否启用 AOF 持久化1(启用)建议生产环境启用 AOF
aof_rewrite_in_progress状态布尔值是否正在执行 AOF 重写0(未执行)1 表示正在执行 AOF 重写
aof_rewrite_scheduled状态布尔值是否计划执行 AOF 重写0(无计划)1 表示 BGSAVE 完成后将执行 AOF 重写
aof_last_rewrite_time_sec时间上次 AOF 重写的执行时间< 300 秒过长表示 AOF 重写效率低
aof_current_rewrite_time_sec时间当前 AOF 重写的执行时间-用于监控正在进行的 AOF 重写进度
aof_last_bgrewrite_status状态字符串上次 AOF 重写的执行状态(ok/err)okerr 表示 AOF 重写失败
aof_last_write_status状态字符串上次 AOF 写入的执行状态(ok/err)okerr 表示 AOF 写入失败
aof_current_size大小字节当前 AOF 文件大小根据数据量而定监控增长趋势,避免文件过大
aof_base_size大小字节AOF 重写基准大小根据数据量而定用于计算 AOF 重写触发条件
aof_pending_rewrite状态布尔值是否有 AOF 重写等待执行0(无)1 表示有 AOF 重写等待执行
aof_buffer_length大小字节AOF 缓冲区长度一般很小过大表示 AOF 写入不及时
aof_rewrite_buffer_length大小字节AOF 重写缓冲区长度一般很小过大表示 AOF 重写不及时
aof_pending_bio_fsync计数等待执行 fsync 的 AOF 写操作数0过大表示 fsync 压力大
aof_delayed_fsync计数延迟执行的 fsync 次数0非 0 表示 fsync 存在延迟

客户端指标

1. 客户端连接

指标名称指标类型单位含义正常范围监控建议
connected_clients状态当前连接的客户端数量< maxclients接近 maxclients 时可能导致新连接被拒绝
client_longest_output_list状态输出缓冲区最长的客户端连接< 1000过大可能表示客户端处理缓慢或存在大查询
client_biggest_input_buf状态字节输入缓冲区最大的客户端连接< 1MB过大可能表示客户端发送了大命令或存在网络问题
blocked_clients状态被阻塞的客户端数量一般为 0非 0 表示存在阻塞命令(如 BLPOP、BRPOP 等)
maxclients配置最大客户端连接数根据服务器配置而定一般设置为 10000-50000

2. 客户端流量

指标名称指标类型单位含义正常范围监控建议
total_net_input_bytes累计字节自启动以来的网络输入总量-用于计算长期平均输入流量
total_net_output_bytes累计字节自启动以来的网络输出总量-用于计算长期平均输出流量

命令统计指标

1. 命令执行统计

指标名称指标类型单位含义正常范围监控建议
cmdstat_<command>统计字典特定命令的执行统计-用于分析命令使用情况和性能
total_commands_processed累计自启动以来处理的命令总数-用于计算长期平均 QPS
rejected_connections累计被拒绝的客户端连接数0非 0 表示 maxclients 已达上限
expired_keys累计自启动以来过期的键数-用于分析过期键频率
evicted_keys累计自启动以来因内存不足被淘汰的键数0 或少量大量表示内存不足或淘汰策略不合理
keyspace_hits累计键空间命中次数-用于计算缓存命中率
keyspace_misses累计键空间未命中次数-用于计算缓存命中率
keyspace_hitrate性能比值缓存命中率(keyspace_hits / (keyspace_hits + keyspace_misses)> 0.8过低可能表示缓存设计不合理或数据过期策略不当

服务器指标

1. 服务器基本信息

指标名称指标类型单位含义正常范围监控建议
redis_version版本字符串Redis 服务器版本-用于确认 Redis 版本,及时升级安全补丁
redis_git_sha1标识字符串Git 提交 SHA1-用于确认 Redis 具体版本
redis_git_dirty标识整数Git 脏标志01 表示代码有未提交修改
redis_build_id标识字符串构建 ID-用于标识 Redis 构建版本
redis_mode模式字符串Redis 运行模式(standalone/sentinel/cluster)-用于确认 Redis 运行模式
os系统字符串操作系统类型-用于了解运行环境
arch_bits架构操作系统架构64建议使用 64 位系统
multiplexing_api网络字符串网络多路复用 APIepoll/kqueue不同系统使用不同 API
gcc_version编译字符串编译时使用的 GCC 版本-用于了解编译环境
process_id进程整数Redis 进程 ID-用于进程管理和监控
run_id标识字符串Redis 实例唯一标识符-用于标识 Redis 实例,重启后变化
tcp_port端口端口监听的 TCP 端口6379用于确认监听端口
uptime_in_seconds运行自启动以来的运行时间-用于监控服务稳定性
uptime_in_days运行自启动以来的运行天数-用于监控服务稳定性
hz配置HzRedis 内部调度频率10一般不需要修改
configured_hz配置Hz配置的调度频率10一般不需要修改
lru_clock时钟LRU 时钟,每秒钟递增-用于 LRU 算法

2. CPU 使用率

指标名称指标类型单位含义正常范围监控建议
used_cpu_sysCPU系统 CPU 时间-用于分析系统 CPU 开销
used_cpu_userCPU用户 CPU 时间-用于分析 Redis 进程 CPU 开销
used_cpu_sys_childrenCPU子进程系统 CPU 时间-主要用于 RDB 和 AOF 持久化
used_cpu_user_childrenCPU子进程用户 CPU 时间-主要用于 RDB 和 AOF 持久化

集群指标

1. 集群基本状态

指标名称指标类型单位含义正常范围监控建议
cluster_enabled状态布尔值是否启用 Cluster 模式1(启用)用于确认 Cluster 模式状态
cluster_state状态字符串Cluster 状态(ok/fail)okfail 表示 Cluster 不可用
cluster_slots_assigned状态已分配的槽位数16384非 16384 表示槽位分配不完整
cluster_slots_ok状态正常的槽位数16384非 16384 表示存在不可用槽位
cluster_slots_pfail状态疑似故障的槽位数0非 0 表示存在疑似故障槽位
cluster_slots_fail状态确认故障的槽位数0非 0 表示存在不可用槽位
cluster_known_nodes状态已知的节点数根据集群规模而定与预期数量不符可能表示节点故障
cluster_size状态集群主节点数根据集群规模而定与预期数量不符可能表示主节点故障
cluster_current_epoch状态整数当前 epoch-用于 Cluster 故障转移
cluster_my_epoch状态整数本节点 epoch-用于 Cluster 故障转移
cluster_stats_messages_sent累计自启动以来发送的集群消息数-用于分析集群通信情况
cluster_stats_messages_received累计自启动以来接收的集群消息数-用于分析集群通信情况

2. 节点状态

指标名称指标类型单位含义正常范围监控建议
cluster_node_timeout配置毫秒节点超时时间15000用于 Cluster 故障检测
cluster_slave_validity_factor配置倍数从节点有效性因子10用于 Cluster 故障转移
cluster_migration_barrier配置主节点最小从节点数1用于 Cluster 节点迁移
cluster_require_full_coverage配置布尔值是否要求槽位全覆盖10 表示允许部分槽位不可用
cluster_allow_reads_when_down配置布尔值Cluster 不可用时是否允许读操作01 可能导致读取不一致数据

线程指标(Redis 6.0+)

1. IO 线程状态

指标名称指标类型单位含义正常范围监控建议
io_threads配置IO 线程数量1-CPU 核心数根据 CPU 核心数调整,一般为核心数的一半
io_threads_do_reads配置布尔值是否在读取阶段使用 IO 线程01 表示启用读取阶段多线程
io_threaded_reads_processed累计IO 线程处理的读取请求数-用于分析 IO 线程效率
io_threaded_writes_processed累计IO 线程处理的写入请求数-用于分析 IO 线程效率

指标获取方式

1. Redis 内置命令

  • INFO:获取 Redis 服务器信息,可指定 section(如 INFO memoryINFO replication
  • INFO all:获取所有 Redis 服务器信息
  • CONFIG GET:获取 Redis 配置参数
  • slowlog get:获取慢查询日志
  • CLIENT LIST:获取客户端连接列表
  • CLUSTER INFO:获取 Cluster 信息
  • CLUSTER NODES:获取 Cluster 节点信息

2. Redis Exporter

Redis Exporter 是 Prometheus 生态中的 Redis 监控指标采集工具,支持采集大部分 Redis 监控指标。

部署示例

bash
docker run -d -p 9121:9121 redis/redis-exporter --redis.addr redis://localhost:6379

3. 监控平台集成

  • Prometheus + Grafana:常用的监控组合,支持自定义仪表盘
  • Datadog:提供 Redis 监控集成,支持自动发现和告警
  • New Relic:提供 Redis 监控集成,支持分布式追踪
  • Zabbix:支持 Redis 监控模板,可自定义监控项和告警规则
  • Elasticsearch + Kibana:可用于监控 Redis 日志和指标

监控最佳实践

1. 指标选择

  • 核心指标优先:重点监控对业务影响最大的指标,如 QPS、延迟、内存使用率、复制状态
  • 分层监控:从不同维度监控 Redis,包括性能、内存、复制、持久化、客户端等
  • 结合业务指标:将 Redis 监控指标与业务指标关联,更好地理解 Redis 对业务的影响

2. 告警设置

  • 设置合理阈值:根据业务需求和历史数据设置告警阈值
  • 分级告警:根据问题严重程度设置不同级别的告警(如警告、严重、紧急)
  • 告警收敛:避免同一问题产生大量告警,设置告警抑制和分组
  • 告警通知渠道:通过邮件、短信、即时通讯工具等多种渠道发送告警

3. 监控频率

  • 实时监控:核心指标(如 QPS、延迟、内存使用率)建议每秒采集一次
  • 定期监控:非核心指标(如持久化状态、命令统计)建议每分钟采集一次
  • 趋势分析:长期存储监控数据,用于趋势分析和容量规划

4. 故障排查

  • 关联分析:将不同指标关联分析,定位问题根因
  • 日志分析:结合 Redis 日志进行故障排查
  • 慢查询分析:定期分析慢查询日志,优化命令执行
  • 性能分析:使用 redis-cli --latencyredis-cli --bigkeys 等工具进行性能分析

常见问题(FAQ)

Q1: 如何选择需要监控的 Redis 指标?

A1: 选择监控指标需要考虑业务需求和 Redis 部署架构:

  1. 核心业务指标:QPS、延迟、内存使用率、复制状态
  2. 根据部署架构
    • 主从架构:重点监控复制状态、持久化状态
    • Cluster 架构:重点监控集群状态、槽位状态
  3. 根据业务特点
    • 写入密集型:重点监控写入性能、持久化状态
    • 读取密集型:重点监控读取性能、缓存命中率

Q2: 如何设置合理的告警阈值?

A2: 设置告警阈值的方法:

  1. 基于历史数据:分析历史数据,设置合理的阈值(如 95% 分位数)
  2. 基于业务需求:根据业务对 Redis 性能的要求设置阈值
  3. 分级设置:设置多级告警阈值(如警告 80%、严重 90%)
  4. 动态调整:根据业务变化和 Redis 负载变化动态调整阈值

Q3: 如何处理 Redis 监控数据?

A3: 处理 Redis 监控数据的方法:

  1. 实时监控:使用 Grafana 等工具进行实时监控和可视化
  2. 趋势分析:长期存储监控数据,用于趋势分析和容量规划
  3. 异常检测:使用机器学习算法进行异常检测,提前发现问题
  4. 告警通知:设置合理的告警规则,及时通知运维人员

Q4: 如何监控 Redis Cluster?

A4: 监控 Redis Cluster 的方法:

  1. 监控集群状态cluster_statecluster_slots_okcluster_size
  2. 监控节点状态cluster_known_nodes、节点健康状态
  3. 监控槽位状态cluster_slots_pfailcluster_slots_fail
  4. 监控集群通信cluster_stats_messages_sentcluster_stats_messages_received
  5. 使用 Cluster 专用监控工具:如 Redis Cluster Manager、Redis Insight

Q5: 如何监控 Redis 慢查询?

A5: 监控 Redis 慢查询的方法:

  1. 设置慢查询阈值slowlog_log_slower_than,一般设置为 10000 微秒
  2. 设置慢查询日志长度slowlog_max_len,一般设置为 128-1024
  3. 定期查看慢查询日志:使用 slowlog get 命令或通过监控平台查看
  4. 分析慢查询原因:识别慢查询命令,优化数据结构或业务逻辑
  5. 设置慢查询告警:当慢查询数量超过阈值时触发告警

Q6: 如何监控 Redis 内存碎片?

A6: 监控 Redis 内存碎片的方法:

  1. 监控内存碎片率mem_fragmentation_ratio,理想范围 1.0-1.5
  2. 启用自动内存碎片整理:Redis 4.0+ 支持自动内存碎片整理
  3. 手动触发内存碎片整理:使用 MEMORY DEFRAG 命令
  4. 定期重启 Redis:在维护窗口重启 Redis,彻底清理内存碎片
  5. 优化内存使用:减少频繁的键值对增删,使用合适的数据结构