珍しいが重要な情報をログに記録する特定のサービスがあります。数か月前に設定しましたが、今日は_journalctl -n 50 --unit=my-service
_を実行して、エントリがないことを確認しました。
私はほとんどのユニットでこの動作に完全に満足しています。すぐに(または多くても数日前)起こったことが必要であり、数か月前のレコードは気にしません。
しかし、journald
に単一の特定のユニットのレコードに対して独立したストレージおよび保持ポリシーを持たせるように指示する方法はありますか?私はそれらの特定のログを、たとえば5年間、それがかかるサイズに関係なく保持したいと考えています。他のユニットのログはこれによる影響を受けず、既存の動作を保持する必要があります。
私はjournald.conf(5)
を理解できなくなっており、ユニット単位の構成が可能な場合はいつでも理解できません。もしそうなら—簡単な具体例に感謝します-どのファイルを編集/作成し、何を書けばよいですか。あるいは、確かにそれができないことを確かに知っているなら、それも良い答えになるでしょう。
注:私の特定のケースにはArch Linux Hostが含まれますが、これはそれほど問題ではないと思います。
私はジャーナリングに不運な可能性が高いようです。独立した "長期保存"ジャーナルを生成する方法(現在、ユーザーごとに異なるジャーナルがあるように)を見つけない限り、それが実行可能で正気なアプローチであるかどうかはわかりません。おそらく、syslogd(およびlogrotate)のセットアップの方が簡単でしょう。
機能 2014年後半には存在しませんでした 。
そして、それはまだここにないようです。少なくとも、「journald:ローテーション/バキューム時に優先度とサービスごとの保持時間を許可する」という行 まだTODOファイルにあります (2016-07-11からのリビジョンへのリンク)。
ログファイルを生成するのは非常に簡単です。デフォルトでは、journaldへのすべてのロギングもsyslogに送られるため、このデフォルトを設定する必要があります。 rsyslog.confは、syslogに渡されたエントリの処理方法を制御します。さらに、SyslogFacility
のデフォルトはdaemon
になるため、通常、サービスのログエントリはdaemon.log
の/var/log
ファイルに格納されます。
サービスファイルの[service]セクションに追加します
SyslogFacility=local2
(数値は0と7の間であることができます) https://www.freedesktop.org/software/systemd/man/systemd.exec.html
/etc/rsyslog.confを変更して(変更する既存の行を見つけます)、local2が特定のファイル(最初の行)に記録され、理想的にはlocal2.none
を追加してsyslogに記録されないようにします(これはすでにジャーナル)。
local2.* /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none -/var/log/syslog
[編集]キャッチオールも修正する必要があります
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none,local2.none -/var/log/messages
もちろん、実際の保存は、logrotateで行う必要があります。
HTH