rsyslog 也使用 $MaxMessageSize 截断消息

rsyslog 也使用 $MaxMessageSize 截断消息

我有一个安装了 rsyslog 的官方 Alpine 容器,我的/etc/rsyslog.conf是:

$MaxMessageSize 64k
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog   # provides kernel logging support
$KLogPermitNonKernelFacility on
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

*.*;auth,authpriv.none          -/var/log/syslog

我使用 运行 rsyslog rsyslogd -f /etc/rsyslog.conf,看来$MaxMessageSize是 1k 而不是 64k 我哪里错了?

更新

我已经在 ubuntu 容器中尝试过并且运行正常,看来 alpine 是问题所在,在 ubuntu 中 rsyslog 是版本 7.4.4,在 alpine 中是 8.18.0

更新2

我也尝试过使用 syslog-ng,结果相同,最大大小为 1k,也许是 Alpine docker 容器的限制?

答案1

昨天我偶然发现了同样的问题,经过一番挖掘,我找到了原因。

我会简短地说:libcAlpine 上使用的库是musl libchttps://www.musl-libc.org/)如果你检查函数的实现sysloghttps://git.musl-libc.org/cgit/musl/tree/src/misc/syslog.c#n87buf),您可以看到表示消息的变量的长度被硬编码为1024。

一个解决方案是自己连接并发送消息(实现 syslog RFC)到套接字/dev/log。效果很好。

另一个可能是glibc在 alpine lib 上使用,但我不知道是否真的可行。

相关内容