监控指标
前言
Redis作为高性能的内存数据库,广泛应用于缓存、消息队列、会话存储等多种场景。在生产环境中,对Redis进行有效监控是确保系统稳定性和性能的关键。通过监控关键指标,可以及时发现潜在问题,预防故障发生,优化系统性能,并为容量规划提供数据支持。
本文将详细介绍Redis监控的关键指标及其影响,帮助运维人员和开发人员构建完善的Redis监控体系。
常见指标
基本指标
连接数
指标名称:connected_clients、blocked_clients
指标说明:
connected_clients:当前连接到Redis的客户端数量blocked_clients:因执行BLPOP、BRPOP、BRPOPLPUSH等阻塞命令而被阻塞的客户端数量
影响分析:
- 连接数过高可能导致内存消耗增加,影响Redis性能
- 阻塞客户端数量过多可能表明存在慢查询或资源竞争问题
- 异常的连接 数波动可能表明应用程序存在连接泄漏问题
建议阈值:
- 连接数应根据应用需求设置合理上限,一般不建议超过10000
- 阻塞客户端数应保持在较低水平,持续超过10个需要关注
命令执行统计
指标名称:total_commands_processed、instantaneous_ops_per_sec、rejected_connections
指标说明:
total_commands_processed:Redis启动以来处理的命令总数instantaneous_ops_per_sec:当前每秒执行的命令数rejected_connections:因达到最大连接数而被拒绝的连接数
影响分析:
instantaneous_ops_per_sec反映了Redis的当前负载,过高可能导致CPU饱和rejected_connections增加表明需要调整最大连接数或优化客户端连接策略- 命令执行数的突然变化可能表明应用行为异常或遭受攻击
建议阈值:
- 命令数应根据硬件性能和应用需求设置合理上限
rejected_connections应保持在0,否则需要调整配置
键值对数量
指标名称:keyspace_hits、keyspace_misses、db0.keys
指标 说明:
keyspace_hits:缓存命中的次数keyspace_misses:缓存未命中的次数db0.keys:当前数据库中的键数量
影响分析:
- 命中率(
keyspace_hits/(keyspace_hits+keyspace_misses))过低表明缓存效果不佳 - 键数量突然增加可能导致内存使用量飙升
- 键数量持续减少可能表明应用存在数据清理问题
建议阈值:
- 缓存命中率应保持在80%以上,低于50%需要优化缓存策略
- 键数量应根据应用需求设置合理上限,避免内存溢出
CPU相关指标
CPU使用率
指标名称:used_cpu_sys、used_cpu_user、instantaneous_cpu_usage
指标说明:
used_cpu_sys:Redis在系统模式下花费的CPU时间(以秒为单位)used_cpu_user:Redis在用户模式下花费的CPU时间(以秒为单位)instantaneous_cpu_usage:当前CPU使用率百分比
影响分析:
- CPU使用率持续高于80%可能导致性能下降
- CPU使用率突然升高可能表明存在慢查询或异常访问
- 系统模式和用户模式CPU时间的比例可以判断Redis是否执行 大量计算密集型操作
建议阈值:
- CPU使用率应保持在80%以下,持续高于90%需要优化或扩容
- CPU使用率突然波动超过20%需要关注,可能存在异常访问
命令执行延迟
指标名称:slowlog_length、slowlog_max_len、instantaneous_kbps
指标说明:
slowlog_length:当前慢查询日志中的条目数slowlog_max_len:慢查询日志的最大长度instantaneous_kbps:当前每千字节的处理速度
影响分析:
- 慢查询数量过多表明存在性能瓶颈
- 命令延迟增加可能导致应用响应变慢
- 网络带宽使用率(
instantaneous_kbps)过高可能导致网络拥塞
建议阈值:
- 慢查询数量应保持在较低水平,超过10个需要分析
- 命令延迟应根据业务需求设置合理上限,一般不超过100ms
内存相关指标
内存使用量
指标名称:used_memory、used_memory_human、used_memory_peak、maxmemory
指标说明:
used_memory:Redis当前使用的内存量(字节)used_memory_human:Redis当前使用的内存量(人类可读格式)used_memory_peak:Redis历史内存使用峰值maxmemory:配置的Redis最大内存限制
影响分析:
- 内存使用率(
used_memory/maxmemory)过高可能导致内存溢出 - 内存使用量持续增加可能表明存在内存泄漏
- 内存使用量突然变化可能表明应用行为异常
建议阈值:
- 内存使用率应保持在80%以下,达到90%需要关注
- 内存使用峰值与当前使用量的比例应保持稳定,突然增加需要分析
内存碎片率
指标名称:mem_fragmentation_ratio、used_memory_rss、used_memory_lua
指标说明:
mem_fragmentation_ratio:内存碎片率(used_memory_rss/used_memory)used_memory_rss:操作系统实际分配给Redis的内存量used_memory_lua:Lua脚本引擎使用的内存量
影响分析:
- 内存碎片率过高(
>1.5)可能导致内存浪费和性能下降 - 内存碎片率过低(
<1.0)表明Redis使用了swap,严重影响性能 - Lua脚本内存使用过多可能表明存 在复杂计算
建议阈值:
- 内存碎片率应保持在1.0-1.5之间,超过1.5需要考虑重启释放碎片
- 内存碎片率低于1.0需要检查是否使用了swap
内存淘汰策略
指标名称:evicted_keys、expired_keys、maxmemory_policy
指标说明:
evicted_keys:因达到内存限制而被淘汰的键数量expired_keys:因达到过期时间而被删除的键数量maxmemory_policy:配置的内存淘汰策略
影响分析:
evicted_keys增加表明内存不足,需要扩容或优化内存使用- 淘汰策略不当可能导致重要数据被误删
- 过期键数量突然变化可能表明应用行为异常
建议阈值:
evicted_keys应保持在较低水平,持续增加需要优化- 内存淘汰策略应根据业务需求合理配置,避免误删重要数据
网络相关指标
网络输入输出
指标名称:instantaneous_input_kbps、instantaneous_output_kbps、total_net_input_bytes、total_net_output_bytes
指标说明:
instantaneous_input_kbps:当前每秒输入数据量(千字节)instantaneous_output_kbps:当前每秒输出数据量(千字节)total_net_input_bytes:Redis启动以来接收的总字节数total_net_output_bytes:Redis启动以来发送的总字节数
影响分析:
- 网络带宽使用率过高可能导致网络拥塞
- 网络流量突然变化可能表明应用行为异常
- 输入输出流量不平衡可能表明存在数据倾斜问题
建议阈值:
- 网络带宽使用率应保持在70%以下,超过90%需要优化
- 网络流量突然波动超过50%需要关注,可能存在异常访问
持久化相关指标
指标名称:rdb_changes_since_last_save、rdb_last_bgsave_status、aof_current_size、aof_rewrite_in_progress
指标说明:
rdb_changes_since_last_save:上次RDB保存后发生变化的键数量rdb_last_bgsave_status:上次RDB后台保存状态aof_current_size:当前AOF文件大小aof_rewrite_in_progress:是否正在进行AOF重写
影响分析:
- RDB/AOF保存失败可能导致数据丢失
- 持久化操作可能阻塞Redis主线程,影响性能
- 持久化文件大小持续增加可能导致磁盘空间不足
建议阈值:
- 持久化操作应保持成功状态,失败需要立即处理
- 持久化文件大小应根据磁盘空间合理设置上限
Redis集群相关指标
集群状态
指标名称:cluster_enabled、cluster_state、cluster_nodes、cluster_slots_fail
指标说明:
cluster_enabled:是否启用了集群模式cluster_state:集群状态(ok、fail、etc.)cluster_nodes:集群中的节点数量cluster_slots_fail:不可用的槽位数量
影响分析:
- 集群状态异常可能导致服务不可用
- 槽位分配不均可能导致某些节点负载过高
- 节点故障可能导致数据不可用
建议阈值:
- 集群状态应保持"ok",异常需要立即处理
- 槽位不可用数量应为0,否则需要修复集群