web-dev-qa-db-ja.com

systemdでlogrotateする方法は?

Systemdとユニットファイルを使用してノードアプリを実行しています。アプリのログはjournalctl -u example.comを使用して表示できますが、ログはある時点で切断され、履歴が消去されます(デバッグに必要です)。

アプリのログがexample.com.log.1example.com.log.2などに保存されるようにsystemdでログローテーションを構成して、アプリの履歴をクエリできるようにするにはどうすればよいですか?

これは私のユニットファイルです:

ExecStart=/usr/bin/node keystone.js
#Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=example.com
User=user
Group=user
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target
11
htor

ストレージの増加

ディスクに保存している場合は、SystemMaxUseSystemKeepFreeを変更することで、使用するスペースを増やすことができます。より多くのスペースがあると、より多くのエントリを格納できます。

デフォルトでは、最大使用制限(SystemMaxUse)はファイルシステムの10%であり、最小空き容量(SystemKeepFree)値は15%です-どちらも4Gに制限されています。

ジャーナルローテーション

ジャーナルは、SystemMaxFileSize値に達したときに自動的にローテーションする必要があり、ジャーナルの数はSystemMaxFilesによって制御されます。時間ベースのローテーションが必要な場合は、MaxFileSecを設定して、エントリが単一のジャーナルに保存される最大時間を設定できます。

保管場所/タイプに関する注意

Journaldでは、ジャーナルエントリをメモリ(Storage=volatile)またはディスク上(Storage=persistent)。上記は、ジャーナルをディスクに保存していることを前提としています-そうでない場合、上記の変数で「システム」を「ランタイム」に置き換える必要があります。

詳細については、man journald.conf

Alternative-ジャーナルエントリを渡す

従来のSYSLOGデーモンにすでに慣れている場合は、ForwardToSyslogオプションを設定してジャーナルイベントを渡すか(メッセージをすぐに転送)、syslogデーモンをジャーナルクライアントのように動作させて、ログ自体をフェッチすることができます。

6
DougC