web-dev-qa-db-ja.com

Ubuntu16.04のsystemdでログが切り捨てられた/欠落している

私はUbuntu16.04サーバーを使用しており、基本的なnodejsスクリプトを作成し、それを単純なsystemdサービスにパッケージ化しました。

/lib/systemd/system/api.serviceのapi.serviceのコンテンツ:

[Unit]
Description=api
After=network.target

[Service]
WorkingDirectory=/var/node/api
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5s
StartLimitInterval=60s
StartLimitBurst=5

[Install]
WantedBy=multi-user.target

journalctl -u api.service -n -fでログを見ると、特にスクリプトが短時間に大量のログ行を生成する場合、スクリプト出力行の一​​部が記録されていないようです。

たとえば、nodejsスクリプトが最初の3000個の整数を出力する単純なforループである場合、ログには約2500行しか記録されていないようです。

/var/node/api/index.jsのindex.jsのコンテンツ:

for (var i = 1; i <= 3000; i++) {
    console.log(i);
}
console.log("end of script");

journalctl -u api.service -n -fでログを表示すると、約2500行しか表示されません。

May 04 13:52:15 test systemd[1]: Stopping api...
May 04 13:52:15 test systemd[1]: Stopped api.
May 04 13:52:15 test systemd[1]: Started api.
May 04 13:52:15 test node[20993]: 1
May 04 13:52:15 test node[20993]: 2
May 04 13:52:15 test node[20993]: 3
May 04 13:52:15 test node[20993]: 4
May 04 13:52:15 test node[20993]: 5
May 04 13:52:15 test node[20993]: 6
...
...
...
May 04 13:52:16 test node[20993]: 2497
May 04 13:52:16 test node[20993]: 2498
May 04 13:52:16 test node[20993]: 2499
May 04 13:52:16 test node[20993]: 2500
May 04 13:52:16 test node[20993]: 2501

SetTimeoutで遅延させても、「スクリプトの終わり」も出力されないことにも注意してください。

ここで何がうまくいかないのか分かりますか?

2
quentinadam

これはおそらくjournalctlconfのレート制限が原因で発生しています。 /etc/systemd/journald.confファイルのRateLimitIntervalRateLimitBurstを確認してください。