journald->rsyslogでログの取りこぼしが見つかる

ログの解析していると、なんか、journald->rsyslogで拾っているログが全部取れていない風。
サイズ的にも一割以下しか拾っていない感じ。
これはマズい。
状態がわからん。
ログには、抑制するって書いてあるけど、単純に捨ててるのね。

Sep  3 23:53:33 nandakana01 journal: Suppressed 25654 messages from /system.slice/kandakana.service

デフォルトでは、10秒間で200以上のメッセージ出力が発生すると制限がかるそうな。
1分で3万アクセスがあるので、ログはその5倍程度発生するかな。
ピーク考えると、10倍以上のマージンはほしいところ。

$ sudo vi /etc/systemd/journald.conf
RateLimitInterval=10s
RateLimitBurst=50000

こんなもんでいいかな。


保管容量が劇的に増えるだろうから、容量も対処する。
journaldのログは、デフォルトではtmpfsに保存されて、再起動で消える。
/var/run/log/journalの容量に応じてログの保存容量も調整される。
永続化には、/var/log/journalを作っておくと、そこに保管されるそうだ。
(journald.confのStorageの内部デフォルトがautoだから?)
現在のシステムではどこにあるのか?

$ ls -l /var/ | grep "run "
lrwxrwxrwx.  1 root root    6 Feb  5  2016 run -> ../run
$ df -h /run
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           921M   89M  832M  10% /run
$ ls -l /var/log/journal
ls: cannot access /var/log/journal: No such file or directory

なんか、専用のtmpfs切られている。
さて、現状の89Mでどの期間保存できているか。
このシステムでは、一日は無理だということはわかっている。
journalctlで先頭のタイムスタンプを見ると、2時間半分しか保存できていない...
取りこぼししてて、保存時間も短いとは...
tmpfsだと、今のサイズをパンパンに使っても、一日がやっとな感じ。
ファイルに落とすとIO負荷が心配になるので、ここはこのままでサイズだけ増やしておく。
デフォルトでは、保存用ディレクトリーの全容量に対して10%以上になるか、該当ディレクトリーのファイルシステムの空き容量が15%以下になると、古いエントリーから順に削除される仕様なのだそう。
保管容量の変更は、/etc/systemd/journald.confの
SystemMaxUse (/var/log/journal)と
RuntimeMaxUse (/var/run/log/journal)に指定する。
デフォルトでは、設定ファイルには他の設定を含めて何も有効な指定はない。

$ cat /etc/systemd/journald.conf | grep RuntimeMaxUse
#RuntimeMaxUse=
$ cat /etc/systemd/journald.conf | grep SystemMaxUse
#SystemMaxUse=

容量の指定はバイト?
詳細はmanせよと設定ファイルに書かれている。
しかし、表記方法はとくに書かれていない...
RuntimeMaxUse=500Mという風に書くのが普通のようだ。
現在のサイズの確認と変更。RAM少ないのでつらい。

$ journalctl --disk-usage
Archived and active journals take up 88.5M on disk.
$ sudo vi /etc/systemd/journald.conf
RuntimeMaxUse=800M
$ sudo systemctl restart systemd-journald


んでもって、まだどこかで落としている。

Sep  5 17:30:26 nandakana01 rsyslogd-2177: imjournal: 244351 messages lost due to rate-limiting
Sep  5 17:31:11 nandakana01 rsyslogd-2177: imjournal: begin to drop messages due to rate-limiting

jounaldからrsyslogに中継している、imjournalに制限があるようだ。
デフォルト設定は、600 秒あたり 20,000 メッセージ。
さっきは10secで5万メッセージだったので、それ以上にしておかないと。
秒5kということは、600秒だと300万...
他のログもあるけど、とりあえずこれで。
/etc/rsyslog.d/にはlisten.confしかないので、明示で上限は設定されていないみたい。

$ sudo vi /etc/rsyslog.conf
$imjournalRatelimitInterval 600
$imjournalRatelimitBurst    3000000
$ sudo systemctl restart rsyslog

なんか消えないっす。
エラー出ているな。

Sep  5 17:41:23 nandakana01 rsyslogd-3003: invalid or yet-unknown config file command 'imjournalRatelimitInterval' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]
Sep  5 17:41:23 nandakana01 rsyslogd-3003: invalid or yet-unknown config file command 'imjournalRatelimitBurst' - have you forgotten to load a module? [try http://www.rsyslog.com/e/3003 ]

モジュール指定がないって?
$ModLoad imjournalの後に書かないとダメかな?
どうも、そうらしい。


まだエラー出る。


なに?
imjournalRatelimitBurstは、65535が最大値だと...
http://qiita.com/kitaji0306/items/ff2a9f53f1b1a63dc4f0
とすると、インターバルタイマを短くするしか。
負荷になるかな?

$ sudo vi /etc/rsyslog.conf
$imjournalRatelimitInterval 20
$imjournalRatelimitBurst    100000

とりあえず出なくなった。
さーて、ログ爆発はどーなるかな... コワ...