私はVanilla Ubuntu 16.04サーバーと呼ばれるものを実行していますが、デフォルトでロギングがどのように設定されているかについて頭をかかげようとしています。 journald
とrsyslog
の両方がインストールされ実行されていることがわかりますが、ログメッセージがどのように処理されているかはまったくわかりません。
ほとんどのメッセージは/var/log/syslog
とjournalctl
の両方に表示されるようですが、/etc/systemd/journald.conf
(基本的にはすべてコメントアウトされている)デフォルト)、/etc/rsyslog.conf
または/etc/rsyslog.d/50-default.conf
。公式のドキュメント、またはこれら2つがUbuntuでどのようにセットアップされているかを説明するブログ投稿を探しましたが、何も見つけることができませんでした。
さらに混乱を増すために、ホストでlogger -p local1.info Test
を実行しましたが、/var/log/syslog
に何も書き込まれていないことがわかりましたが、メッセージはjournalctl
の下に表示されました。
私の質問は:
logger
から送信されたメッセージは、どうやらSyslogではなくジャーナルに表示されるのでしょうか。更新:logger
が期待通りに動作しないことが判明したのは私の側の間違いだったので、メインの質問には関係ありません。
デフォルトでは、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
のような他のファイルである可能性があります。
私にとっては、journalctl
とsyslog
の両方に表示されます。
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に送信します。
必要に応じて構成を変更します。