第16章 RHEL システムロールを使用したロギングの設定
logging
RHEL システムロールを使用すると、ローカルホストとリモートホストをロギングサーバーとして自動的に設定し、多数のクライアントシステムからログを収集できます。
ロギングソリューションは、ログと複数のロギング出力を読み取る複数の方法を提供します。
たとえば、ロギングシステムは以下の入力を受け取ることができます。
- ローカルファイル
-
systemd/journal
- ネットワーク上の別のロギングシステム
さらに、ロギングシステムでは以下を出力できます。
-
/var/log/
ディレクトリーのローカルファイルに保存されるログ - Elasticsearch エンジンに送信されるログ
- 別のロギングシステムに転送されるログ
logging
RHEL システムロールを使用すると、状況に合わせて入力と出力を組み合わせることができます。たとえば、journal
からの入力をローカルのファイルに保存しつつも、複数のファイルから読み込んだ入力を別のロギングシステムに転送してそのローカルのログファイルに保存するようにロギングソリューションを設定できます。
16.1. logging
RHEL システムロールを使用したローカルログメッセージのフィルタリング
logging
RHEL システムロールのプロパティーベースのフィルターを使用すると、さまざまな条件に基づいてローカルログメッセージをフィルタリングできます。その結果、たとえば以下を実現できます。
- 明確なログ: トラフィック量の多い環境では、ログが急増することがあります。エラーなどの特定のメッセージに注目することで、問題をより早く特定できるようになります。
- システムパフォーマンスの最適化: ログの量が多すぎると、通常、システムパフォーマンスが低下します。重要なイベントのみを選択的にログに記録することで、リソースの枯渇を防ぎ、システムをより効率的に運用できます。
- セキュリティーの強化: システムエラーやログイン失敗などのセキュリティーメッセージを効率的にフィルタリングすることで、関連するログのみを取得できます。これは、違反を検出し、コンプライアンス基準を満たすために重要です。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo
権限がある。
手順
次の内容を含む Playbook ファイル (例:
~/playbook.yml
) を作成します。--- - name: Deploy the logging solution hosts: managed-node-01.example.com tasks: - name: Filter logs based on a specific value they contain ansible.builtin.include_role: name: rhel-system-roles.logging vars: logging_inputs: - name: files_input type: basics logging_outputs: - name: files_output0 type: files property: msg property_op: contains property_value: error path: /var/log/errors.log - name: files_output1 type: files property: msg property_op: "!contains" property_value: error path: /var/log/others.log logging_flows: - name: flow0 inputs: [files_input] outputs: [files_output0, files_output1]
サンプル Playbook で指定されている設定は次のとおりです。
logging_inputs
-
ロギングの入力ディクショナリーのリストを定義します。
type: basics
オプションを指定すると、systemd
ジャーナルまたは Unix ソケットからの入力が対象になります。 logging_outputs
-
ロギングの出力ディクショナリーのリストを定義します。
type: files
オプションにより、ローカルファイル (通常は/var/log/
ディレクトリー内) にログを保存できます。property: msg
、property: contains
、およびproperty_value: error
オプションを指定すると、error
文字列を含むすべてのログが/var/log/errors.log
ファイルに保存されます。property: msg
、property: !contains
、およびproperty_value: error
オプションを指定すると、他のすべてのログが/var/log/others.log
ファイルに保存されます。error
値は、フィルタリングする必要がある文字列に置き換えることができます。 logging_flows
-
ロギングのフローディクショナリーのリストを定義して、
logging_inputs
とlogging_outputs
の関係を指定します。inputs: [files_input]
オプションは、ログの処理を開始する入力のリストを指定します。outputs: [files_output0, files_output1]
オプションは、ログ送信先の出力のリストを指定します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.yml
このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
管理対象ノードで、
/etc/rsyslog.conf
ファイルの構文をテストします。# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run... rsyslogd: End of config validation run. Bye.
管理対象ノードで、システムが
error
文字列を含むメッセージをログに送信することを確認します。テストメッセージを送信します。
# logger error
以下のように
/var/log/errors.log
ログを表示します。# cat /var/log/errors.log Aug 5 13:48:31 hostname root[6778]: error
hostname
はクライアントシステムのホスト名に置き換えます。ログには、logger コマンドを入力したユーザーのユーザー名 (この場合はroot
) が含まれていることに注意してください。
関連情報
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
ファイル -
/usr/share/doc/rhel-system-roles/logging/
ディレクトリー -
rsyslog.conf(5)
およびsyslog(3)
man ページ