MONITOR 的用途与风险
MONITOR 让当前连接实时回显服务端处理的每条命令,格式包含时间戳、数据库编号、来源地址与完整命令参数,适合短时间抓取现场,例如确认某个业务究竟发了什么命令。代价很直接:每条命令都要额外格式化并推送一遍,会明显拖慢实例吞吐;同时输出里带着其他客户端的命令与参数,可能泄露敏感数据。生产中应限制使用窗口与权限,抓完立即退出,常态观测改用慢日志与命令统计。
基本信息
| 用途 | 短时抓取命令现场 |
|---|---|
| 输出内容 | 时间戳、库号、来源地址、命令与参数 |
| 性能影响 | 实例吞吐明显下降 |
| 安全影响 | 可能暴露其他客户端的敏感参数 |
| 常态替代 | SLOWLOG、INFO commandstats、INFO latencystats |
| 权限 | 受 ACL 类别控制 |
| 使用窗口 | 秒级,抓完立即退出 |
典型使用场景
- 排查某业务到底发了哪些命令,验证调用方式与预期不符
- 确认客户端驱动是否产生了额外的元命令
- 短窗口复现问题时抓取精确的命令序列
- 验证某个写操作的真实来源,定位多写入方冲突
- 排查误删或误改数据的直接执行者
- 培训与演练环境中演示命令到达服务端的顺序
短窗口抓取
短窗口抓取
redis-cli MONITOR # 开始回显,抓完立刻退出
redis-cli MONITOR | grep -m 20 'GET' # 客户端侧按需过滤
redis-cli SLOWLOG GET 10 # 常态替代:慢命令样本
redis-cli INFO commandstats # 常态替代:命令聚合统计
redis-cli INFO latencystats # 常态替代:命令级百分位
redis-cli ACL WHOAMI # 确认当前用户的权限范围观测手段对照
| 手段 | 粒度 | 开销 |
|---|---|---|
| MONITOR | 每条命令实时 | 高,需短窗口 |
| SLOWLOG | 超阈值命令样本 | 低 |
| commandstats | 按命令聚合 | 低 |
| latencystats | 命令级百分位 | 低 |
生产上限制抓取窗口在秒级,并限制能执行该命令的账号,抓完立即关闭连接。
MONITOR 输出可能包含账号、令牌等明文参数,截图或导出分享之前必须脱敏。