rsyslog 集中式日志的消息大小上限是多少?
RFC 3164 规定完整消息不超过 1024 字节;rsyslog 上限取决于版本、输入模块和配置,超限可能截断、拆分或丢弃,可用 $MaxMessageSize 调整。本文说明限制来源与调整方法。
RFC 3164 规定完整 syslog 消息(含头部)不超过 1024 字节。rsyslog 的接收上限还取决于版本、输入模块和配置,可通过 $MaxMessageSize 调整;超限可能被截断、拆分或丢弃,不能只按 UDP/TCP 判断。
调整方法
# rsyslog.conf(旧式语法)
$MaxMessageSize 64k
# 新式 RainerScript
global(maxMessageSize="64k")
注意事项
- 传输方式:UDP 受网络 MTU 限制(过大会被 IP 分片甚至丢失),大消息宜使用正确配置消息分帧和大小上限的 TCP 或 RELP,但它们也不能保证无限长度或绝不丢失;
- 上下游一致:接收端调大了,发送端(rsyslog/syslog-ng/应用)也要支持;
- 长日志的正确姿势:堆栈跟踪等多行内容应在采集端合并为一条(多行解析),而不是依赖超大消息。
常见问题(FAQ)
Q:被截断的日志能恢复吗? 接收端缺失的字节无法凭空恢复;截断可能发生在发送、传输或接收环节。若源文件仍完整,可调整相应环节后重新采集。
Q:怎么验证截断? 发一条已知超长消息,对比接收端内容长度。