Redis 集群慢查询日志配置 slowlog 怎么开启分析?

文章导读
Redis 集群慢查询日志无法在入口统一配置,因为 slowlog 是节点级内存缓冲区,仅记录本节点命令。必须对每个 Redis 节点单独配置 slowlog-log-slower-than 阈值和 slowlog-max-len 长度。分析时需通过外部脚本或监控面板逐节点采集 SLOWLOG GET 结果,按时间戳归并聚合展示。注意 CONFIG SET 不跨节点生效,需逐节点操作,且新节点上线
📋 目录
  1. Redis 怎样分析集群节点的慢查询_针对每个独立节点配置 slowlog 并通过监控面板聚合展示
  2. Redis 集群如何快速排查慢查询_使用 SLOWLOG 命令分析各节点的执行耗时
  3. 开启 Redis 的慢查询日志
  4. Redis 为什么变慢了?常见延迟问题定位与分析
  5. FAQ
A A

Redis 集群慢查询日志无法在入口统一配置,因为 slowlog 是节点级内存缓冲区,仅记录本节点命令。必须对每个 Redis 节点单独配置 slowlog-log-slower-than 阈值和 slowlog-max-len 长度。分析时需通过外部脚本或监控面板逐节点采集 SLOWLOG GET 结果,按时间戳归并聚合展示。注意 CONFIG SET 不跨节点生效,需逐节点操作,且新节点上线需重新下发配置,避免日志断层。

Redis 怎样分析集群节点的慢查询_针对每个独立节点配置 slowlog 并通过监控面板聚合展示

Redis 集群无法在入口统一配置 slowlog,因其去中心化架构决定 slowlog 是节点级内存缓冲区,仅记录本节点命令,CONFIG SET 等配置不跨节点生效,必须逐节点独立启用、采集和聚合。必须对每个 Redis 节点单独配置 slowlog,集群本身不转发或聚合 slowlog;监控面板看到的“集群慢查询”全是靠外部采集 + 拼接实现的。为什么不能只在集群入口配 slowlog Redis 集群是去中心化架构,redis-cli --cluster 或客户端直连的都是具体节点 (如 10.0.1.5:7001),命令由哈希槽路由到对应节点执行。slowlog 是节点级内存缓冲区,只记录本节点执行的命令,CONFIG SET slowlog-log-slower-than 10000 对其他节点完全无效。常见错误现象:INFO slowlog 在某个节点查不到慢命令,但业务反馈有延迟——其实是慢命令落在了别的节点上 使用场景:排查某次 HGETALL 耗时突增,必须确认是哪个 slot 所在节点出的问题 性能影响:每个节点开 slowlog-max-len 1024 几乎无开销,但若统一用脚本轮询所有节点再合并,采集延迟可能达秒级 如何为每个节点独立启用并导出 slowlog 不能依赖集群配置同步,得逐节点操作。推荐用带节点列表的循环脚本,而非试图用 redis-cli --cluster call(它不支持 SLOWLOG GET)。实操建议:用 redis-cli -h node_ip-pnode_portSLOWLOG GET 10 拉取最近 10 条,配合 TIME 字段做时间对齐 参数差异:slowlog-log-slower-than 单位是微秒,设成 10000 表示记录 >10ms 的命令;生产环境建议从 50000(50ms) 起步,避免日志爆炸 容易踩的坑:SLOWLOG RESET 是清空当前节点 slowlog,别误在巡检脚本里加这句;SLOWLOG LEN 返回的是当前条数,不是总累计量 监控面板怎么聚合展示才不误导人 所谓“集群慢查询看板”,本质是把 N 个节点的 SLOWLOG GET 结果按时间戳归并,再按命令类型、耗时分桶。关键在时间对齐和来源标注。使用场景:Grafana 展示时,每条慢查询必须带字段 node_addr="10.0.1.5:7001"和 slot_id="12345"(可通过 CLUSTER KEYSLOT 反查) 兼容性影响:Redis 6+ 的 SLOWLOG GET 返回结构含 duration(微秒)、command(数组形式),旧版本需适配解析逻辑 容易踩的坑:直接把所有节点 slowlog 倒进同一个 ES index 会导致时间乱序;必须用采集时间 + 命令执行时间 (unix timestamp 字段) 双重排序 最麻烦的其实是节点动态扩缩容——新节点上线后,slowlog 配置不会自动继承,必须触发配置下发;而下线节点的日志如果没及时归档,那段时间的慢查询就永远断层了。

Redis 集群如何快速排查慢查询_使用 SLOWLOG 命令分析各节点的执行耗时

SLOWLOG GET 是查看 Redis 单节点慢查询的直接命令,返回含 ID、时间戳、耗时、命令等字段的最近 N 条记录,但需手动逐节点执行、注意阈值与日志长度配置,并结合 CLUSTER 命令定位 key 所属 slot 和节点。如何用 SLOWLOG 查看当前节点的慢查询记录 Redis 单节点上查慢查询最直接的方式就是 SLOWLOG GET,但它默认只返回最近 128 条 (由 slowlog-max-len 控制),且不带节点标识——在集群里容易混淆是哪个分片出的问题。执行前先确认当前连接的是目标节点 (比如通过 redis-cli -h node1 -p 7001),再运行:复制 AI 写代码 1 SLOWLOG GET 10 返回每条记录包含:唯一 ID、Unix 时间戳、执行耗时 (微秒)、命令与参数 (已脱敏)、客户端 IP 和端口 (Redis 7.0+)。注意:slowlog-log-slower-than 默认是 10000 微秒 (10ms),低于这个值不会记入日志,需按业务响应要求调整。如果返回空,不代表没慢查询,可能是阈值设太高或日志被轮转清掉了 命令参数里的 KEYS 或 SCAN 模式匹配值会被截断,看不出具体 key,得结合 CLIENT LIST 或监控系统补全上下文 集群中每个节点都要单独连进去查,不能跨节点聚合 ——SLOWLOG 是实例级命令,不支持 CLUSTER SLOWLOG 这类语法 为什么 SLOWLOG RESET 在集群里要慎用 重置日志看起来是清理干扰项的好办法,但在多节点运维中容易误操作:你只连了 A 节点执行了 SLOWLOG RESET,B 节点的慢查询还在持续积累,结果排查时发现“只有 B 有慢请求”,其实只是 A 的记录被清了而已。不要在批量巡检脚本里无条件加 SLOWLOG RESET,尤其在问题复现阶段 若真要清空,建议先 SLOWLOG GET 保存快照,再 reset;或者改用 SLOWLOG LEN 做容量判断,避免日志溢出影响性能 slowlog-max-len 设太大 (如 10000) 会导致内存占用上升,特别是高 QPS 集群,每个节点都存上万条记录,会挤占主内存资源 如何定位到具体是哪个 slot 或 key 导致慢查询 SLOWLOG 只给命令和耗时,不暴露 slot、key 所属节点或数据分布信息。要关联到集群拓扑,得手动做两步映射:ImageCreator 是 Photoshop 的免费 AI 插件,赋予艺术家强大的功能,如 TXT2IMG、IMG2IMG、Fill 和 ControlNet。从慢查询记录里提取第一个 key(如 GET user:1001 中的 user:1001),用 CLUSTER KEYSLOT user:1001 算出 slot 编号 再用 CLUSTER GETKEYSINSLOT {slot} 1 验证该 slot 是否真在这个节点上;如果不返回结果,说明 key 实际路由到了别的节点 —— 可能是客户端没启用哈希标签 ({}),或用了 MGET 跨 slot

开启 Redis 的慢查询日志

如何开启 redis 的慢查询日志功能?redis 慢查询日志的默认阈值是多少?如何设置 redis 慢查询日志的时间阈值?建议先关注,点赞,收藏后再阅读。redis 的慢查询日志是通过 slowlog 功能保存的。当慢查询 (执行时间超过设定阈值) 发生时,redis 会将慢查询的命令和执行时间等信息添加到慢查询日志中。保存机制:redis 通过 slowlog-log-slower-than 配置项设置一个时间阈值,单位为微秒,默认值为 10000 微秒 (即 10 毫秒).如果一个命令的执行时间超过此阈值,则将该命令添加到慢查询日志中。存储位置:redis 的慢查询日志保存在内存中,且以先进先出的方式保存。redis 通过 slowlog-max-len 配置项设置慢查询日志的最大长度,默认值为 128,即最多保存最近的 128 条慢查询日志。如果慢查询日志已经达到最大长度,并且有新的慢查询产生,则最早的慢查询日志会被删除。注意:慢查询日志仅在 slowlog 功能开启时才会保存,可以通过配置项 slowlog-log-slower-than=0 来关闭慢查询日志功能。可以通过命令 slowlog get 来获取慢查询日志的信息,或者使用 config get slowlog-max-len 命令获取慢查询日志的最大长度配置。在 redis 中,可以使用以下操作步骤来开启和关闭慢查询日志功能:1.开启慢查询日志功能:打开 redis 配置文件,一般是 redis.conf .找到以下配置项:#慢查询日志相关配置 slowlog-log-slower-than 10000slowlog-max-len 128 将 slowlog-log-slower-than 的值设置为一个大于 0 的整数,表示执行时间大于该值的命令会被记录到慢查询日志中。根据具体需求设置合适的值。保存配置文件并重新启动 redis 服务器。2.关闭慢查询日志功能:打开 redis 配置文件,一般是 redis.conf .找到以下配置项:#慢查询日志相关配置 slowlog-log-slower-than 0 将 slowlog-log-slower-than 的值设置为 0,表示关闭慢查询日志功能。保存配置文件并重新启动 redis 服务器。

Redis 集群慢查询日志配置 slowlog 怎么开启分析?

Redis 为什么变慢了?常见延迟问题定位与分析

首先,第一步,建议你去查看一下 Redis 的慢日志。Redis 提供了慢日志命令的统计功能,我们通过以下设置,就可以查看有哪些命令在执行时延迟比较大。首先设置 Redis 的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微秒,例如设置慢日志的阈值为 5 毫秒,同时设置只保留最近 1000 条慢日志记录:代码语言:javascript AI 代码解释 # 命令执行超过 5 毫秒记录慢日志 CONFIGSETslowlog-log-slower-than5000# 只保留最近 1000 条慢日志 CONFIGSETslowlog-max-len1000 设置完成之后,所有执行的命令如果延迟大于 5 毫秒,都会被 Redis 记录下来,我们执行 SLOWLOG get 5 查询最近 5 条慢日志 代码语言:javascript AI 代码解释 127.0.0.1:6379>SLOWLOGget51)1)(integer)32693# 慢日志 ID2)(integer)1593763337# 执行时间 3)(integer)5299#执行耗时 (微秒)4)1)"LRANGE"# 具体执行的命令和参数 2)"user_list_2000"3)"0"4)"-1"2)1)(integer)326922)(integer)15937633373)(integer)50444)1)"GET"2)"book_price_1000"通过查看慢日志记录,我们就可以知道在什么时间执行哪些命令比较耗时,如果你的业务经常使用 O(n) 以上复杂度的命令,例如 sort、sunion、zunionstore,或者在执行 O(n) 命令时操作的数据量比较大,这些情况下 Redis 处理数据时就会很耗时。

FAQ

Redis 集群慢查询日志默认阈值是多少?

Redis 集群慢查询日志配置 slowlog 怎么开启分析?

默认值为 10000 微秒 (即 10 毫秒),单位是微秒。

慢查询日志存储在哪里?

redis 的慢查询日志保存在内存中,且以先进先出的方式保存。

Redis 集群慢查询日志配置 slowlog 怎么开启分析?

如何在集群中查看慢查询?

必须对每个 Redis 节点单独配置 slowlog,集群本身不转发或聚合 slowlog,需逐节点独立启用、采集和聚合。