web-dev-qa-db-ja.com

journaldでユニットごとのログストレージポリシーを構成する方法

珍しいが重要な情報をログに記録する特定のサービスがあります。数か月前に設定しましたが、今日は_journalctl -n 50 --unit=my-service_を実行して、エントリがないことを確認しました。

私はほとんどのユニットでこの動作に完全に満足しています。すぐに(または多くても数日前)起こったことが必要であり、数か月前のレコードは気にしません。

しかし、journaldに単一の特定のユニットのレコードに対して独立したストレージおよび保持ポリシーを持たせるように指示する方法はありますか?私はそれらの特定のログを、たとえば5年間、それがかかるサイズに関係なく保持したいと考えています。他のユニットのログはこれによる影響を受けず、既存の動作を保持する必要があります。

私はjournald.conf(5)を理解できなくなっており、ユニット単位の構成が可能な場合はいつでも理解できません。もしそうなら—簡単な具体例に感謝します-どのファイルを編集/作成し、何を書けばよいですか。あるいは、確かにそれができないことを確かに知っているなら、それも良い答えになるでしょう。

注:私の特定のケースにはArch Linux Hostが含まれますが、これはそれほど問題ではないと思います。

14
drdaeman

私はジャーナリングに不運な可能性が高いようです。独立した "長期保存"ジャーナルを生成する方法(現在、ユーザーごとに異なるジャーナルがあるように)を見つけない限り、それが実行可能で正気なアプローチであるかどうかはわかりません。おそらく、syslogd(およびlogrotate)のセットアップの方が簡単でしょう。

機能 2014年後半には存在しませんでした

そして、それはまだここにないようです。少なくとも、「journald:ローテーション/バキューム時に優先度とサービスごとの保持時間を許可する」という行 まだTODOファイルにあります (2016-07-11からのリビジョンへのリンク)。

7
drdaeman

ログファイルを生成するのは非常に簡単です。デフォルトでは、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

1
Brian