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:容器部署常用,采集仍需配置;daemonize 时可能重定向到 /dev/null。
1. 运行日志配置
# redis.conf
# debug / verbose / notice / warning,其他值依版本
loglevel notice
logfile /var/log/redis/redis.log
# logfile "" 表示输出到 stdout(容器推荐)
# 可选:走系统syslog
syslog-enabled yes
syslog-ident redis
syslog-facility local0
四个级别:debug(最啰嗦)、verbose、notice(默认,生产推荐)、warning(只记重要问题)。Redis 的运行日志主要覆盖:启动加载、RDB/AOF 持久化过程、主从复制事件、内存告警、客户端连接异常。看到 "Background saving failed" 或复制断连,需结合详细错误区分磁盘/权限、fork内存、配置或网络等原因,不能直接定因。
2. SLOWLOG:慢查询诊断
# 执行超10000微秒(10ms)记录
slowlog-log-slower-than 10000
# 内存最多保留1024条
slowlog-max-len 1024
SLOWLOG GET 10 # 最近 10 条慢命令
SLOWLOG LEN # 当前条数
SLOWLOG RESET # 清空
每条记录含:时间戳、执行耗时、命令与参数(可能截断,返回结构随版本变化)。注意:耗时只计命令执行时间,不含网络与排队;SLOWLOG 存在内存中(环形缓冲),重启即失。
3. MONITOR 与 LATENCY
MONITOR # 有命令排除/脱敏规则,不是完整持久审计
MONITOR 是排障的"最后手段":能抓到应用到底发了什么命令(比如意外的 KEYS *),但会让吞吐下降明显,只在授权排障窗口谨慎使用;从库观察不等同于主库客户端流量。
LATENCY HISTORY command # command是事件类别,不是任意命令名称
LATENCY DOCTOR # 自动诊断并给出建议
CONFIG SET latency-monitor-threshold 100 # 启用延迟监控(毫秒)
阈值为毫秒,需先启用并积累样本;CONFIG SET是运行期设置,持久化需另行管理。LATENCY DOCTOR 会给出人类可读的延迟分析报告——"Redis 变慢了"的第一站。
4. 键空间通知与其他
# 开启键/键事件及A别名包含的事件类别;A不代表所有新增类别
notify-keyspace-events "KEA"
键空间通知通过 pub/sub 发布键事件(如 __keyevent@0__:expired),常用于缓存失效联动。注意它走Pub/Sub,断连期间通知会丢,过期通知发生在实际删除时,并非TTL到点的精确计时器。
AOF/RDB 相关的持久化日志、复制日志也都在运行日志中——aof_rewrite 失败、MISCONF 错误(RDB后台保存失败且相应保护开启时可拒绝写入,磁盘满只是可能原因之一)都是必须告警的信号。
区分 Redis 运行日志与慢命令
排查持久化失败时,先按 DataKit 文件采集配置接入 Redis 实际运行日志,测试级别与时间解析。慢命令则按 Redis 集成配置实例地址和所需权限,验证 SLOWLOG 采集结果;两类数据的来源和采集方式不同。
在同一故障窗口中对照运行日志、慢命令与实例指标,再为需要持续关注的错误配置日志检测。慢命令不一定说明热点 key,仍需结合命令参数与应用访问方式判断。
常见问题(FAQ)
Redis 为什么没有查询日志?
设计取舍:Redis 单机每秒数万到十万级命令,全量查询日志会拖垮它。需要审计时MONITOR不提供持久完整审计保证;需评估专用审计方案或代理层(如 twemproxy/自研 proxy)记录;SLOWLOG 已覆盖性能视角。
loglevel 生产环境该用哪个?
notice(默认)。verbose/debug 量大会影响性能且价值低,只在深度排障时临时开启(CONFIG SET loglevel verbose 可运行时调整)。
Redis 日志文件会自动轮转吗?
不会。主机部署按实际版本测试rename/create轮转:Redis正常文件日志路径通常每次写入打开/关闭,不能一律推荐有丢失窗口的copytruncate。容器stdout仍需运行时轮转与留存;daemonize且logfile为空可能输出到/dev/null。
怎么抓"谁在执行 KEYS *"这类危险命令?
短时 MONITOR 抓包确认来源应用;长期方案是 用ACL按用户限制命令(rename-command已不推荐) + SLOWLOG/LATENCY 监控 ,并验证所需的错误检测规则。
系列阅读
- 上一篇:MariaDB 日志详解
- 下一篇:MongoDB 日志详解
- 相关阅读:MySQL 日志详解 | 日志采样详解
[1]: 观测云文档《DataKit 日志采集综述》https://docs.guance.com/integrations/datakit-logging/
[2]: 观测云文档《日志查看器》https://docs.guance.com/logs/explorer/
[3]: 观测云文档《监控》https://docs.guance.com/monitoring/