web-dev-qa-db-ja.com

Ubuntu 16.04でのrsyslogとjournaldの関係

私はVanilla Ubuntu 16.04サーバーと呼ばれるものを実行していますが、デフォルトでロギングがどのように設定されているかについて頭をかかげようとしています。 journaldrsyslogの両方がインストールされ実行されていることがわかりますが、ログメッセージがどのように処理されているかはまったくわかりません。

ほとんどのメッセージは/var/log/syslogjournalctlの両方に表示されるようですが、/etc/systemd/journald.conf(基本的にはすべてコメントアウトされている)デフォルト)、/etc/rsyslog.confまたは/etc/rsyslog.d/50-default.conf。公式のドキュメント、またはこれら2つがUbuntuでどのようにセットアップされているかを説明するブログ投稿を探しましたが、何も見つけることができませんでした。

さらに混乱を増すために、ホストでlogger -p local1.info Testを実行しましたが、/var/log/syslogに何も書き込まれていないことがわかりましたが、メッセージはjournalctlの下に表示されました。

私の質問は:

  1. Journaldとrsyslogは、Ubuntu 16.04(デフォルト)でどのように連携しますか?
  2. どうしてloggerから送信されたメッセージは、どうやらSyslogではなくジャーナルに表示されるのでしょうか。

更新:loggerが期待通りに動作しないことが判明したのは私の側の間違いだったので、メインの質問には関係ありません。

14
motns

デフォルトでは、rsyslogは「imuxsock」モジュールを使用しており、モジュールは以下を提供します。

ローカルUnixソケットを介してsyslogメッセージを受け入れる機能。最も重要なことは、これがsyslog(3)呼び出しがsyslogメッセージをrsyslogd [1] に配信するメカニズムです。

rsyslogは、「imjournal」というモジュールを使用してsystemd-journalから構造化ログメッセージをインポートできます [2]

次のようにロードできます。

module(load="imjournal") 

に:

/etc/rsyslog.conf

一方、「systemd-journald」はすべてのデータ自体をキャプチャします。

man systemd-journald

systemd-journaldは、ロギングデータを収集および保存するシステムサービスです。さまざまなソースから受信したログ情報に基づいて、構造化されたインデックス付きジャーナルを作成および維持します。

   ·   Kernel log messages, via kmsg
   ·   Simple system log messages, via the libc syslog(3) call
   ·   Structured system log messages via the native Journal API, 
       see sd_journal_print(4)
   ·   Standard output and standard error of system services
   ·   Audit records, via the audit subsystem

rsyslogdを使用してシステムログへのアクセス権を保持しながら、journalctlを無効にできます。

$ Sudo systemctl mask rsyslogd
$ Sudo systemctl stop syslog.socket
$ Sudo systemctl stop rsyslog.service
$ systemctl is-active rsyslog.service 
inactive
$ logger -p mail.info Helllooo
$ journalctl

たとえば、centosは「imuxsock」モジュールを使用して、rsyslogを介してすべての「systemd-journald」データをキャプチャしますが、opensuseには「syslog」がまったくありません。


メッセージが/var/log/syslogにならない理由を調べるには、このファイルを確認する必要があります。

less /etc/rsyslog.d/50-default.conf

*.infoを探し、それらが保存される場所を確認します。messagesのような他のファイルである可能性があります。

私にとっては、journalctlsyslogの両方に表示されます。

12
Ravexina

Systemdは、システムの起動時にサービスを開始するために使用される初期化システムです。 Journaldは、systemdによって開始されたサービスのログを作成します。 journaldをsystemdと統合することにより、最も早いブートプロセスメッセージでもjournaldで利用できます。

Rsyslogは、ログ処理用に特別に作成されたデーモンであり、journaldとは関係ありません。ログをさまざまな方法で取得し、さまざまな方法で出力できます。 journaldからログメッセージを取得することもデフォルトでは有効になっていません。そのためには、/ etc/rsyslog.confファイルに書き込む必要があります。

$ModLoad imjournal # im -> input module
OR
load(type="imjournal")

現在、journaldからのログも受け入れます。ただし、/ etc/rsyslog.confファイルは変更しないでください。

/etc/rsyslog.confファイルの最後に、次の行があります。

$IncludeConfig /etc/rsyslog.d/*.conf

これは、.sysが/etc/rsyslog.d/フォルダーにあるすべてのファイルがrsyslogのロード中に含まれるべきであることを意味します。したがって、すべてのカスタム構成はこれらのファイルに入れてください

ファイル/etc/rsyslog.d/journald.confを作成し、その中に以下のスニペットを貼り付けることをお勧めします。

以下はimjournalのrsyslog公式ページからの抜粋です。

module(load="imjournal" PersistStateInterval="100"
   StateFile="/path/to/file") #load imjournal module
module(load="mmjsonparse") #load mmjsonparse module for structured logs

template(name="CEETemplate" type="string" string="%TIMESTAMP% %HOSTNAME% %syslogtag% @cee: %$!all-json%\n" ) #template for messages

action(type="mmjsonparse")
action(type="omfile" file="/var/log/ceelog" template="CEETemplate")

1行目-journaldからのログを受け入れるためのimjournalモジュールをロードします

2-ログの解析に使用されるmmjsonparseモジュールがロードされます

3-テンプレートで記述された形式に構造化されています

4-mmjsonparseモジュールを使用してこれらのログを解析します。

5-omfile(出力モジュールファイル-ファイルへの出力)モジュールを使用して、指定されたテンプレートで提供された構造に従って、これらのログをファイル、つまり/ var/log/ceelogに送信します。

必要に応じて構成を変更します。

4
luv.preet