Redis 日志详解:运行日志、慢查询日志与延迟监控实战
Redis 日志中文详解:loglevel 与 logfile 配置、syslog 集成、SLOWLOG 慢查询(slowlog-log-slower-than/slowlog-max-len)、MONITOR 的风险、LATENCY 延迟监控、keyspace 通知,以及观测云 DataKit 采集告警落地方案。
Redis 的日志体系与传统数据库很不一样:运行日志简洁克制,真正的诊断能力在 SLOWLOG、LATENCY、MONITOR 这些内建命令里。本文讲清 Redis 日志与诊断工具的正确用法,并给出观测云平台落地方案。
核心要点速览
- Redis 运行日志极其精简:默认只记启动、持久化、复制、告警级事件——它设计上就不是"流水账"。
- SLOWLOG 是性能诊断主武器:记录执行超时的命令(内存中,不落盘),
SLOWLOG GET读取。 - MONITOR 是"全量命令实时流",生产慎用:对性能影响巨大,只用于短时抓包式排障。
- logfile 为空时输出到 stdout:容器部署的天然姿势,DataKit 直接采集。
1. 运行日志配置
# redis.conf
loglevel notice # debug / verbose / notice / warning
logfile /var/log/redis/redis.log
# logfile "" 表示输出到 stdout(容器推荐)
syslog-enabled yes # 可选:走系统 syslog
syslog-ident redis
syslog-facility local0
四个级别:debug(最啰嗦)、verbose、notice(默认,生产推荐)、warning(只记重要问题)。Redis 的运行日志主要覆盖:启动加载、RDB/AOF 持久化过程、主从复制事件、内存告警、客户端连接异常。看到 "Background saving failed" 或复制断连,基本就是磁盘或网络出了问题。
2. SLOWLOG:慢查询诊断
slowlog-log-slower-than 10000 # 执行超 10000 微秒(10ms)的命令记录
slowlog-max-len 1024 # 内存中保留 1024 条
SLOWLOG GET 10 # 最近 10 条慢命令
SLOWLOG LEN # 当前条数
SLOWLOG RESET # 清空
每条记录含:时间戳、执行耗时、完整命令与参数。注意:耗时只计命令执行时间,不含网络与排队;SLOWLOG 存在内存中(环形缓冲),重启即失。
3. MONITOR 与 LATENCY
MONITOR # 实时流出所有执行的命令——全量!
MONITOR 是排障的"最后手段":能抓到应用到底发了什么命令(比如意外的 KEYS *),但会让吞吐下降明显,只能在从库或低峰短时使用。
LATENCY HISTORY command # 某命令的延迟历史
LATENCY DOCTOR # 自动诊断并给出建议
CONFIG SET latency-monitor-threshold 100 # 启用延迟监控(毫秒)
LATENCY DOCTOR 会给出人类可读的延迟分析报告——"Redis 变慢了"的第一站。
4. 键空间通知与其他
notify-keyspace-events "KEA" # 开启键事件通知(过期、删除等)
键空间通知通过 pub/sub 发布键事件(如 __keyevent@0__:expired),常用于缓存失效联动。注意它走 pub/sub 而非日志文件。
AOF/RDB 相关的持久化日志、复制日志也都在运行日志中——aof_rewrite 失败、MISCONF 错误(磁盘写满时 Redis 拒绝写入并输出 MISCONF)都是必须告警的信号。
观测云落地:Redis 日志采集与分析
- 运行日志采集:容器部署 logfile 留空走 stdout,DataKit 容器采集;主机部署
conf.d/log/logging.conf配置logfiles指向 redis.log,source: redis、service标识实例。 - SLOWLOG 接入:DataKit Redis 集成采集器可周期拉取 SLOWLOG 与 INFO 指标,慢命令与运行指标同平台呈现。
- 解析与告警:Pipeline 提取级别映射标准
status;监控器对Background saving failed、MISCONF、OOM command not allowed、复制断连等关键字告警,通知钉钉/企业微信/飞书。 - 分析:日志查看器聚合持久化/复制事件时间线;慢命令按 pattern 聚类,找出热点 key 操作。
- 成本控制:Redis 运行日志量小,统一标准索引即可;INFO/SLOWLOG 拉取频率按需调整。
常见问题(FAQ)
Redis 为什么没有查询日志?
设计取舍:Redis 单机每秒数万到十万级命令,全量查询日志会拖垮它。需要审计时用 MONITOR(短时)或代理层(如 twemproxy/自研 proxy)记录;SLOWLOG 已覆盖性能视角。
loglevel 生产环境该用哪个?
notice(默认)。verbose/debug 量大会影响性能且价值低,只在深度排障时临时开启(CONFIG SET loglevel verbose 可运行时调整)。
Redis 日志文件会自动轮转吗?
不会。主机部署用系统 logrotate(copytruncate 模式,Redis 不支持 reopen 信号轮转的完整机制时尤其推荐);容器部署走 stdout 无需关心。
怎么抓"谁在执行 KEYS *"这类危险命令?
短时 MONITOR 抓包确认来源应用;长期方案是 rename-command KEYS "" 禁用危险命令 + SLOWLOG/LATENCY 监控 + 观测云告警兜底。
系列阅读
- 上一篇:MariaDB 日志详解
- 下一篇:MongoDB 日志详解
- 相关阅读:MySQL 日志详解 | 日志采样详解