Systemdとユニットファイルを使用してノードアプリを実行しています。アプリのログはjournalctl -u example.com
を使用して表示できますが、ログはある時点で切断され、履歴が消去されます(デバッグに必要です)。
アプリのログがexample.com.log.1
、example.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
ストレージの増加
ディスクに保存している場合は、SystemMaxUse
やSystemKeepFree
を変更することで、使用するスペースを増やすことができます。より多くのスペースがあると、より多くのエントリを格納できます。
デフォルトでは、最大使用制限(SystemMaxUse
)はファイルシステムの10%であり、最小空き容量(SystemKeepFree
)値は15%です-どちらも4Gに制限されています。
ジャーナルローテーション
ジャーナルは、SystemMaxFileSize
値に達したときに自動的にローテーションする必要があり、ジャーナルの数はSystemMaxFiles
によって制御されます。時間ベースのローテーションが必要な場合は、MaxFileSec
を設定して、エントリが単一のジャーナルに保存される最大時間を設定できます。
保管場所/タイプに関する注意
Journaldでは、ジャーナルエントリをメモリ(Storage=volatile
)またはディスク上(Storage=persistent
)。上記は、ジャーナルをディスクに保存していることを前提としています-そうでない場合、上記の変数で「システム」を「ランタイム」に置き換える必要があります。
詳細については、man journald.conf
。
Alternative-ジャーナルエントリを渡す
従来のSYSLOGデーモンにすでに慣れている場合は、ForwardToSyslog
オプションを設定してジャーナルイベントを渡すか(メッセージをすぐに転送)、syslogデーモンをジャーナルクライアントのように動作させて、ログ自体をフェッチすることができます。