
SystemD 저널은 전역 구성 옵션 RateLimitIntervalSec
에 따라 기록된 메시지를 제한합니다 . 특정 단위/서비스 사용 및 지시문 RateLimitBurst
에 따라 해당 값을 변경할 가능성이 있습니다 . 불행히도 이러한 서비스별 옵션을 작동시킬 수 없습니다. 내가 뭘 잘못하고 있는지 찾거나 systemd에 문제가 있는지 확인하는 데 도움이 되길 바랍니다.LogRateLimitIntervalSec
LogRateLimitBurst
내 환경:
# 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
내 결과:
- /root/test.log는 다음에서 중지됩니다.
Hello world 12500
journalctl -u test.service --no-pager
에 정차하다Hello world 12500
- /var/log/messages 보고서(때때로 이 메시지가 기록되지 않음)
systemd-journald[304398]: Suppressed 982500 messages from test.service
또한 전역 저널 설정을 다음으로 변경하고 systemd-journald를 다시 시작하는 것도 확인했습니다.
[Journal]
RateLimitIntervalSec=0
RateLimitBurst=0
예상대로 속도 제한이 발생하지 않습니다.
나는이 시점에서 단서가 없습니다. 시스템 소스 코드를 분석하려고 시도했지만 내 머리 위에 있습니다. 누구든지 적어도 내 단계를 다시 만들고 systemd Github 문제 추적기에 이를 보고하는 데 도움이 될 결과를 보고할 수 있다면 말이죠.
감사해요.
답변1
섹션 RateLimitIntervalSec=, RateLimitBurst=
은 다음과 같이 man journald.conf
말합니다.
모든 종류의 속도 제한을 끄려면 두 값 중 하나를 0으로 설정하세요.
LogRateLimitIntervalSec=, LogRateLimitBurst=
그러나 의 섹션 에서는 이를 찾을 수 없습니다 man systemd.exec
. 이를 사용 test.service
하여 이를 다른 것으로 설정하면 0
예상대로 작동하는지 쉽게 확인할 수 있습니다.