rsyslog 集中式日志的消息大小上限是多少?
传统 syslog 协议(RFC 3164)单条消息上限约 1KB,超长会被截断;rsyslog 默认上限通常 8KB,可用 $MaxMessageSize 调大。本文说明限制来源与调整方法。
传统 syslog 协议(UDP,RFC 3164)单条消息约定不超过 1024 字节——超长会被截断。rsyslog 实际默认值更大(2KB-8KB 视版本),并可通过 $MaxMessageSize 调整,TCP 传输下可到上百 KB。
调整方法
# rsyslog.conf(旧式语法)
$MaxMessageSize 64k
# 新式 RainerScript
global(maxMessageSize="64k")
注意事项
- 传输方式:UDP 受网络 MTU 限制(过大会被 IP 分片甚至丢失),大消息务必用 TCP 或 RELP;
- 上下游一致:接收端调大了,发送端(rsyslog/syslog-ng/应用)也要支持;
- 长日志的正确姿势:堆栈跟踪等多行内容应在采集端合并为一条(多行解析),而不是依赖超大消息。
观测云对照
观测云 DataKit 日志采集支持长文本(默认上限远大于 syslog 传统限制),多行日志按行首正则合并为单条上报,天然规避截断问题。
常见问题(FAQ)
Q:被截断的日志能恢复吗? 不能——发送端发出时就已截断,只能调整源头。
Q:怎么验证截断? 发一条已知超长消息,对比接收端内容长度。