Redis慢日志治理

[复制链接]
发表于 前天 21:54 | 显示全部楼层 |阅读模式
Redis慢日志治理

背景简述

某次生产超时排查中,发现集群里已有不少慢日志。慢命令会阻塞 Redis 主线程,偶发超时若不治理,后续可能波及更多其他应用,因此做专项治理。
治理目标


  • 生产环境每日慢日志数目低落 90%+
  • 杜绝再因慢命令出现 Redis 超时
治理方案

团体闭环:建基线 → 分类定位 → 排期改造 → 防止复发
1. 先定基线,再谈改造

Redis 自带的 SLOWLOG 是内存环形缓冲:条数有上限,有新记录时会自动挤掉旧记录,历程重启也会丢。只靠「此刻打开客户端看一眼」,支撑不了归类、排期和结果对比。基线发起先落实下面几项:
项做法依据慢阈值10ms(Redis 默认)与官方默认一致;治理期不必先纠结改阈值,优先处理已凌驾 10ms 的命令保留条数默认 128 → 512排查时 128 已写满,说明不够,但当时不清晰总量;经验调到 512 后未被填满,故相沿外部持久化定时拉取集群全部节点,只入库「昨日」记录可当日重复执行、不必 SLOWLOG RESET;无按日沉淀则无法对比治理结果告警通道按日统计入库条数(全集群合计),超阈通知依赖按日沉淀而非内存快照;阈值可调(本专项当前为 100)调整 slowlog-max-len 时应对齐各节点并 CONFIG REWRITE,避免重启回到 128。
2. 定位时区分两类根因

基线就绪后,用持久化数据按命令类型、key 前缀等统计占比,优先处理占比高的场景,并与应用负责人对齐改造方案与上线窗口。
来源怎么定: 有客户端名称时最直接。缺失时先看 key 前缀 大致判断应用,再代码搜索确认;拿不准与负责人核对。容器下 client IP 常是宿主机 IP,不宜看成应用标识。
类型典型体现处理原则命令使用不规范KEYS、大 key DEL、单次过大的 HGETALL / HMSET换成安全命令或拆批方案设计缺陷只能靠全库扫才知道有哪些 key;热点大 Hash 被频繁整表拉先确认业务真正需要什么,再改结构或加本地缓存3. 常见改造范式

现象改造方向高频 KEYS + 批量读取若只需 TopN:定时算好写入固定 key;清理类:改 SCAN高频 HGETALL / 大范围 HMGET本地缓存降频,或 HSCAN 分批(按体量调 COUNT)大批量 HMSET / HSET拆成多批,避免单次命令过大大 key 上的 DEL改 UNLINK(键立即不可见,内存异步回收)为什么不直接禁用 KEYS
rename-command KEYS "" 能杜绝误用,但不发起治理初期就对生产一刀切:

  • 存量未清干净:直接禁用可能变成线上故障。
  • 部分旧栈对 SCAN 支持不完整:需先升级再迁清理逻辑。
  • 顺序:先按占比改造 → 开辟 / 测试环境禁用做门禁 → 生产确认无 KEYS(或仅剩可接受噪声)后再评估禁用。
4. 如何低落复发


  • 告警监控:每日慢日志数目超阈的告警跟进。
  • 规范沉淀:禁止 KEYS、大 key 优先 UNLINK、大 Hash 禁止一次性拉全量、批量写入须拆批。
  • 环境门禁:开辟 / 测试先禁用 KEYS;生产待存量清零后再评估。
治理结果


  • 每日慢日志数目(全集群合计,昨日入库)平均下降约 96%
  • 重点接口压测:TopN 类约百倍,大 Hash 读路径约翻倍

RedisME 在治理中的作用

RedisME 的查看、导出、调参等针对集群做了优化,支持多节点一并查看与设置。

  • 格式化查看
    表格展示命令、耗时、客户端、时间等,支持过滤排序,比 SLOWLOG GET 原始输出更易发现高频模式。
  • 数据导出
    便于线下归类、对齐责任人;也可作持久化上线前的人工采样。
  • 调整慢参数
    界面修改阈值与 slowlog-max-len(如 128 → 512);集群下可一次落到所有节点。
  • 参数持久化
    仅 CONFIG SET 重启会丢。可在 RedisME的终端执行 CONFIG REWRITE(支持广播)写回配置文件。

下载地址

RedisME:  https://www.hepengju.com

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表