ロギングの流れ
はじめまして。H.Uでございます。
今回は初めてのブログを書く機会ですので、LPIC1 取得の際に気になった部分をまとめました。
資格勉強の閑話として拝見頂ければ幸いでございます。
システムログのお話
エンジニアになり、見ない日が無いシステムログ
Linuxでは syslog、rsyslog、syslog-ng、systemd-journal 等々。
現在の ロギング は rsyslog と systemd-journal の組み合わせがよく利用されているので、
今回は systemd-journal ~ rsyslog のロギング の流れをご紹介したいと思います。
systemd-journal のロギング
まずは、systemd-journal についてです。
今回は Apache を利用して、ロギングの流れを確認してみます。
現在のApacheは停止状態です。
ここでわざと設定ファイルに間違えた記述をしてみます。
さらに、間違えた記述の状態で起動してみます。
当然、起動しません。
しかし、journalctl -xe という出力が表示されました。
journalctl (-x : 詳細 -e :最新の部分を表示) はsystemd-journaldが集めたログを表示するコマンドです。
それでは、systemd-journalのログを確認してみます。
===================================================================
— Unit httpd.service has finished shutting down.
4月 09 01:09:44 WEB02 systemd[1]: Starting The Apache HTTP Server…
— Subject: Unit httpd.service has begun start-up
— Defined-By: systemd
— Unit httpd.service has begun starting up.
4月 09 01:09:44 WEB02 httpd[11095]: AH00526: Syntax error on line 359 of /etc/httpd/conf/httpd.conf:
4月 09 01:09:44 WEB02 httpd[11095]: Invalid command ‘abcdefghijklmnopqrstuvwxyz’, perhaps misspelled or defined by a module not included in the server configuration
4月 09 01:09:44 WEB02 systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
4月 09 01:09:44 WEB02 systemd[1]: httpd.service: Failed with result ‘exit-code’.
— Subject: Unit failed
— Defined-By: systemd
— The unit httpd.service has entered the ‘failed’ state with result ‘exit-code’.
4月 09 01:09:44 WEB02 systemd[1]: Failed to start The Apache HTTP Server.
— Subject: Unit httpd.service has failed
— Defined-By: systemd
— The result is failed.
===================================================================
→ 簡単なログですが、しっかりと出力されています。
Apacheの状態もfailedになっています。
次に正しい設定ファイルで起動してみます。
===================================================================
4月 09 01:28:41 WEB02 systemd[1]: Starting The Apache HTTP Server…
— Subject: Unit httpd.service has begun start-up
— Defined-By: systemd
— Unit httpd.service has begun starting up.
4月 09 01:28:42 WEB02 systemd[1]: Started The Apache HTTP Server.
— Subject: Unit httpd.service has finished start-up
— Defined-By: systemd
— Unit httpd.service has finished starting up.
— The start-up result is done.
===================================================================
今回は start したことが、ログにしっかりと記録されています。
Apacheの状態もactive (running) に変わりました。
ここまでは systemd-journal がサービス(今回はApache) のロギングする様子を簡単に確認しました。
次は rsyslog + systemd-journal の 構造についてです。
rsyslog + systemd-journal の構造
まずは上の概略図を確認してみてください。
これは systemd-journal ~ rsyslog 一連の流れ です。
一つ前の見出しで確認できたのが、サービス → systemd-journal に出力されるロギングの流れです。
次は systemd-journal → rsyslog の ロギングの流れです。
systemd-journal が記録した ログは ソケットファイルによって rsyslog へ出力されます。
( ソケットファイル とは、情報をやり取りするために必要なファイルだと考えてください。)
ソケットファイルは journal.conf で設定できます。
今回のソケットファイルは /usr/lib/systemd/system/systemd-journald.socket の様です。
Rsyslogのロギング
最後に、rsyslogのロギングの仕方です。
こちらはrsyslog.conf のデフォルトに近い設定です。
conf ファイルを見ると、いくつかの module が load されていることが確認できます。
今回は imjournal と imuxsock だけ簡単にご紹介致します。
・imjournal
imjournal は journal からログを収集する機能を持つモジュールです。
・imuxsock
imuxsock はアプリケーションからのメッセージを受け取る機能を持つモジュールです。
今回はimjournal のみ利用するのでimuxsockについては簡単な説明だけにします。
しかし、ロギングの詳細が知りたい場合はimuxsockについて調べるのも面白いかもしれません。
( 一例ですが、sftp のchroot ログ設定時で利用します。)
少し横道に逸れたので、ロギングについてへ話を戻します。
Rsyslog は セレクタ と アクション という設定でロギングします。
セレクタは ファシリティ と プライオリティ に分かれており、
ファシリティはメッセージの機能を、プライオリティはメッセージの重要度を設定できます。
また、アクションは出力先を指定できます。
セレクタ (ファシリティ , プライオリティ )についての詳細は下記の表に記載します。
今回は Apache を利用して、systemd-journal ~ rsyslog のロギング の流れを確認するだけですので、
簡単なセレクタ と アクション を設定します。
ファシリティがdaemon , プライオリティが * ( 全てのプライオリティ) 、
アクションが /var/log/test.conf の rsyslog 設定です。
それでは、 systemd -journal と同様に Apache を 起動して、
rsyslog でロギング します。
systemd-journal に出力されていた Apache のログの一部が出力されました。
これが systemd-journal ~ rsyslog 一連の流れ です。
今回は基本的なロギングについてのお話でした。
これからも LPIC 出題される複雑なシステムを解説しながら、ご紹介できればと考えています。
今後ともネットアシストをよろしくお願い致します。