Журнал SystemD ограничивает зарегистрированные сообщения в соответствии с RateLimitIntervalSec
и RateLimitBurst
глобальные параметры конфигурации. Есть возможность изменить эти значения для конкретной единицы / услуги, используя LogRateLimitIntervalSec
и LogRateLimitBurst
директивы. К сожалению, я не могу заставить работать эти параметры для каждой услуги. Я надеюсь, что вы поможете мне найти, что я делаю не так, или подтвердите, что что-то не так с systemd.
Моя среда:
# uname -srvmpio
Linux 4.18.0-193.14.2.el8_2.x86_64 #1 SMP Sun Jul 26 03:54:29 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
# cat /etc/centos-release
CentOS Linux release 8.2.2004 (Core)
# systemctl --version
systemd 239
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy
# rsyslogd -v
rsyslogd 8.1911.0-3.el8 (aka 2019.11)
Убедитесь, что ограничения глобального журнала оставлены по умолчанию в /etc/systemd/journald.conf
:
[Journal]
#RateLimitIntervalSec=30s
#RateLimitBurst=10000
и перезапустите, если были необходимы какие-либо изменения
systemctl restart systemd-journald
Подготовьте тестовый сценарий /root/test.sh
:
#!/bin/bash
for i in {1..1000000}
do
echo "Hello world $i"
done
Подготовить тестовый сервисный блок /root/test.service
:
[Unit]
Description=Test limit service
[Service]
Type=simple
WorkingDirectory=/root
ExecStart=/root/test.sh
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=test
LogRateLimitIntervalSec=0
LogRateLimitBurst=0
[Install]
WantedBy=multi-user.target
Убедитесь, что ограничение скорости rsyslog отключено, изменив /etc/rsyslog.conf
:
module(load="imjournal"
StateFile="imjournal.state"
Ratelimit.Interval="0")
Настройте расположение файла журнала службы тестирования, создав /etc/rsyslog.d/test.conf
:
if ($programname == 'test') then {
action(
type="omfile"
File="/root/test.log"
)
stop
}
Перезапустите rsyslog:
systemctl restart rsyslog
Установите тестовую службу:
# systemctl enable /root/test.service
Проверьте настройки предела скорости тестовой услуги (LogRateLimitIntervalSec
хранится внутри как LogRateLimitIntervalUSec
):
# systemctl show --property LogRateLimitIntervalUSec test.service --no-pager
LogRateLimitIntervalUSec=0
# systemctl show --property LogRateLimitBurst test.service --no-pager
LogRateLimitBurst=0
Запустите службу:
systemctl start test.service
Мой результат:
Hello world 12500
journalctl -u test.service --no-pager
останавливается на Hello world 12500
systemd-journald[304398]: Suppressed 982500 messages from test.service
Я также подтвердил, что изменение глобальных настроек journald на (и перезапуск systemd-journald):
[Journal]
RateLimitIntervalSec=0
RateLimitBurst=0
не приводит к ожидаемому ограничению скорости.
Я не понимаю на данный момент. Даже пытался проанализировать исходный код systemd, но это над моей головой. Если бы кто-нибудь хотя бы воссоздал мои шаги и сообщил о результатах, которые были бы полезны в сообщении об этом в системе отслеживания проблем Github.
Спасибо.