Назад | Перейти на главную страницу

rsyslog усекает сообщение также с помощью $ MaxMessageSize

У меня есть официальный контейнер alpine с установленным rsyslog, мой /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 1к вместо 64к Где я ошибаюсь?

ОБНОВИТЬ

Я попробовал в контейнере ubuntu и отлично работал, кажется, что проблема в alpine, в ubuntu rsyslog версии 7.4.4, в alpine 8.18.0

ОБНОВЛЕНИЕ 2

Я пробовал также с syslog-ng и получил тот же результат, максимальный размер 1 КБ, может быть, это ограничение контейнера alpine docker?

Вчера я наткнулся на ту же проблему и, покопавшись, нашел причину.

Я коротко скажу: libc lib, используемый на alpine, - это musl libc (https://www.musl-libc.org/). Если вы проверите их реализацию syslog функция (https://git.musl-libc.org/cgit/musl/tree/src/misc/syslog.c#n87), вы можете видеть, что длина переменной buf которые представляют сообщение, жестко запрограммированы на 1024.

Одним из решений является подключение и отправка сообщения (реализация RFC системного журнала) на /dev/log розетка себе. Это работает хорошо.

Другой может быть использовать glibc на alpine lib, но я не знаю, возможно ли это на самом деле.