※CentOS7環境下で確認しています。
syslogを大量の件数吐き出すとjournald側で受け取れなくなる症状が発生しました。
journalctlで見ても特定の日付のレコードを最後に全く書かれなくなります。
(自分の環境で秒間1000件を2日程度連続稼働)
RateLimitInterval=0
RateLimitBurst=0
などに設定しても状況は変わらず…原因も分からず…
journaldを経由してrsyslogからログを飛ばして使用してたのですがこの状態だともはやどうしようもできません。
なのでjournaldを経由しないでCentOS6などでやっていたrsyslog側でsyslogを受け取って流す方法へ変更します。
journaldは止められないので、サービスは動作するが何もしない状態にしてrsyslogを従来のsyslog収集用と同様にする方法になります。
/etc/systemd/journald.confを変更
↓Storageはnoneにする。
Storage=none
↓以下の設定はすべて0にしておく
RateLimitInterval=0
RateLimitBurst=0
SystemMaxUse=0
RuntimeMaxUse=0
/etc/rsyslog.d/listen.confを変更
↓#をつけてコメントアウトする。コメントアウトすることでdefaultの/dev/logが使われるようになる。
#$SystemLogSocketName /run/systemd/journal/syslog
/etc/rsyslog.confを変更
↓imuxsockを有効に、imjournalを無効にする。
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
#$ModLoad imjournal # provides access to the systemd journal
↓OmitLocalLoggingは off に設定する。
$OmitLocalLogging off
↓OmitLocalLoggingをコメントアウト
#$IMJournalStateFile imjournal.state
↓LimitInterval、LimitBurstは全て0に設定する。
$SystemLogRateLimitInterval 0
$SystemLogRateLimitBurst 0
$imjournalRatelimitInterval 0
$imjournalRatelimitBurst 0
rsyslogd,journaldを再起動
$ sudo systemctl restart rsyslogd.service
$ sudo systemctl restart systemd-journald.service
これでjournaldは動きつつもrsyslogdに/dev/logが繋がって問題なく取得できます。
ちなみにjournaldをsystemctl maskで止めると立ち上がらなくなったり挙動がおかしくなったります。
journaldは止めてはダメ。ゼッタイ。
止めてしまった人はsshとかで頑張って入ってsystemctl unmaskで元に戻してください(私のことです…)