rsyslog 的 repeatedmsgreduction(重复消息压缩)怎么用?

rsyslog 的 $RepeatedMsgReduction 会把连续重复的消息压缩为"last message repeated N times"。配置位置、开关方式及注意事项本文详解。

最佳实践
rsyslog 的 repeatedmsgreduction(重复消息压缩)怎么用?封面

$RepeatedMsgReduction on 让 rsyslog 把连续重复的消息压缩成一条 last message repeated N times,防止相同报错刷屏。传统配置写在 rsyslog.conf;现代版本建议结合 imfile/input 的参数按需控制。

基本配置

# /etc/rsyslog.conf(传统指令)
$RepeatedMsgReduction on

开启后,短时间内连续重复的相同消息会被合并:

Jan 15 10:30:00 host app: connection failed
Jan 15 10:30:05 host rsyslogd: last message repeated 47 times

注意事项

  1. 只在消息完全相同且连续时生效:中间夹一条别的消息就重新计数;
  2. 可能掩盖问题:排障时"repeated N times"让你看不到每次失败的具体上下文;
  3. 较新版本默认行为有变化:部分发行版默认关闭,或改用 repeatedMsgContainsOriginalMsg 等细粒度指令。

更精细的控制(RainerScript)

# 按输入单独控制(imfile 示例)
input(type="imfile"
      File="/var/log/myapp/app.log"
      Tag="myapp"
      compressRepeatedMsgs="on"
)

应用侧更优的做法

与其让 syslog 压缩重复,不如在应用层控制:日志框架的限流(logback 的 DuplicateMessageFilter、自定义 rate limiter)从源头减少重复输出。

观测云对照

日志集中到观测云后,重复消息可以在平台侧聚合统计(按 message 聚合计数),无需在采集端压缩——既保留了完整数据,又能看到趋势。

常见问题(FAQ)

Q:开启后 grep 不到报错原文了?
A:只有第一条保留原文,后续都是 "repeated N times"。排障需要完整原文时应关闭此功能。

Q:这个功能在 UDP syslog 传输上有效吗?
A:RepeatedMsgReduction 作用于消息写入/转发阶段,对转发目标同样生效(发送方只发一条计数消息)。

Q:journald 也有类似机制吗?
A:systemd-journald 默认也有速率限制(RateLimitIntervalSec/RateLimitBurst),超出的消息被丢弃并计数。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台