У меня есть официальный контейнер 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, но я не знаю, возможно ли это на самом деле.