生产环境下Redis集群的Slowlog慢查询如何导出分析_通过脚本定时采集慢日志至ELK

冬伟小哥_2731

冬伟小哥_2731

2026-06-22

317人浏览

原创

必须逐节点执行slowlog get,用shell脚本循环调用redis-cli拉取各节点日志,每条记录标注node_addr和slot_id,提取unix时间戳作为exec_time写入es,按天分索引并确保新节点配置同步。

生产环境下redis集群的slowlog慢查询如何导出分析_通过脚本定时采集慢日志至elk

怎么用脚本定时采集每个 Redis 节点的 SLOWLOG GET 数据

必须逐节点执行 SLOWLOG GET,不能靠集群命令一键拉取。Redis 集群没有 CLUSTER SLOWLOG 这类语法,所有慢日志都是节点本地内存缓冲区,不跨节点同步。

推荐用 shell + redis-cli 循环调用,例如:

for node in 10.0.1.5:7001 10.0.1.5:7002 10.0.1.6:7001; do
  echo "=== $node ==="
  redis-cli -h $(echo $node | cut -d: -f1) -p $(echo $node | cut -d: -f2) SLOWLOG GET 100 | \
    sed "s/^/[node:$node] /" >> slowlog_all.log
done
  • 每次只取 100 条,避免单次响应过大;slowlog-max-len 建议设为 1000 以上,防止关键日志被覆盖
  • 务必在每条记录前打上 [node:10.0.1.5:7001] 标签,否则后续归并时无法区分来源
  • 不要在循环里加 SLOWLOG RESET —— 容易清掉正在排查的问题现场
  • 时间戳字段(第二列)是 Unix 秒级整数,不是毫秒,解析时注意对齐单位

为什么直接往 Elasticsearch 写 slowlog 容易乱序

多个节点并发采集、网络延迟、脚本调度误差,会导致日志写入 ES 的时间远晚于命令实际执行时间。如果只按 @timestamp(写入时间)排序,会把发生在 10:00:01 的慢查询排在 10:00:05 之后,误导分析结论。

正确做法是:从 SLOWLOG GET 返回的第二字段提取执行时间戳,作为 exec_time 字段显式写入 ES,并在 Kibana 中用它做主排序依据。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • SLOWLOG GET 每条返回含四个字段:ID、Unix 时间戳(秒)、耗时(微秒)、命令数组;该时间戳就是命令执行完成时刻
  • rsbeat 或自研采集器必须解析这个字段,不能依赖 Logstash 的 @timestamp
  • 若用 Filebeat + processors,需配置 dissect 提取第二列,再用 convert 转成日期类型
  • ES mapping 中 exec_time 必须设为 date 类型,且格式匹配 epoch_second

如何让 Kibana 展示时不混淆不同节点的慢查询

每条慢日志必须携带两个强标识字段:node_addr 和 slot_id。前者用于区分物理节点,后者用于关联 key 分布和集群拓扑。

slot_id 不能靠猜,得从命令里抽 key 再查:

# 示例:SLOWLOG GET 返回中有一条是 ["HGETALL", "user:profile:1001"]
# 则执行:
redis-cli -h 10.0.1.5 -p 7001 CLUSTER KEYSLOT user:profile:1001
# 得到 slot_id=12345
  • 采集脚本应在拿到 SLOWLOG GET 结果后,对每条命令中的第一个 key(如 HGETALL 后的参数)调用 CLUSTER KEYSLOT
  • 若命令无 key(如 INFO、CONFIG GET),slot_id 留空或标为 none
  • Kibana 的可视化里,用 node_addr 做折线图分组,用 slot_id 做热力图横轴,能快速识别“是否某几个 slot 集中拖慢”
  • 别把所有节点日志塞进同一个 index;建议按天分 index,如 redis-slowlog-2026.05.25,方便 TTL 和清理

新节点上线后 slowlog 配置为什么总是漏配

Redis 集群扩缩容时,新节点默认沿用 redis.conf 原始配置,slowlog-log-slower-than 和 slowlog-max-len 不会自动继承旧节点设置。运维脚本若只扫“当前存活节点”,会跳过刚加入但尚未配置的节点。

  • 扩容后第一件事不是连上去查日志,而是先确认配置:运行 CONFIG GET slowlog-log-slower-than,看是否等于预期值(如 50000)
  • 建议把 slowlog 配置纳入初始化模板,或用 Ansible 在 redis-server 启动前注入配置项
  • 下线节点的日志若未及时导出,那段窗口期的慢查询就永远丢失——采集脚本需带节点生命周期检查,发现节点状态变为 fail 时自动触发一次最终快照
  • 最隐蔽的坑:某些云厂商的“集群代理版”实例,控制台看到的慢日志其实是代理层汇总的,和真实节点 SLOWLOG GET 结果不一致,排查时务必直连节点验证

真正难的不是导出,是让每条日志带着可追溯的上下文进 ELK:谁执行的、在哪执行的、操作了哪个 slot、当时集群拓扑是否稳定。少一个字段,定位就得绕三圈。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4349

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3855

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7052

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6762

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1036

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

5978

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习