DUICUO

rsyslog ログサービスとアプリケーションに関する簡単な説明

ラボの紹介

現代のコンピューティングおよびネットワーク環境において、ログ管理は特にエンタープライズログ管理、アプリケーションのトラブルシューティング、セキュリティインシデント監視において非常に重要になっています。オンプレミスのサーバークラスターでも、パブリッククラウドの分散アプリケーションシステムでも、ログデータの分析は監視、トラブルシューティング、パフォーマンス最適化、そしてセキュリティ確保に不可欠です。

パート01、 rsyslogの紹介

1.1 rsyslogログサービスの概要

rsyslog(ロケット高速ログシステム)は、syslogプロトコルをベースとしたシステムログ処理・転送システムです。1秒あたり数百万レコードという極めて高速なログ処理システムであり、高いパフォーマンス、優れたセキュリティ機能、そしてモジュール設計を備えています。

特性:

① 高性能: rsyslog は効率的なスレッド モデルと非同期処理メカニズムを採用しており、大量のログ データを迅速かつ安定して処理できます。

② 柔軟で強力: rsyslog はさまざまな入出力モジュールをサポートし、syslog、tcp、udp、tls などのさまざまなデバイスやシステムと統合できます。同時に、rsyslog はさまざまなフィルタリングおよび処理ルールもサポートしているため、ニーズに応じてログの保存、転送、および処理方法をカスタマイズできます。

③ スケーラビリティ: rsyslog は優れたスケーラビリティを備えており、さまざまなシナリオでのログ管理要件を満たすために、ニーズに応じてプラグインを使用してカスタマイズおよび拡張できます。

④ セキュリティ: rsyslog は、ログデータのセキュリティと整合性を確保するために、暗号化された送信と認証メカニズムをサポートしています。

図 1 に示すように、rsyslog のメッセージ フローは、入力モジュール -> 前処理モジュール -> メイン キュー -> フィルタリング モジュール -> 実行キュー -> 出力モジュールとなります。

1.2 基本的なrsyslog設定

rsyslog はファシリティの概念を導入します。ファシリティとは、rsyslog サービスプロセスがログを受信するためのエージェントです。これらのエージェントは、対応するログ情報を収集する役割を担います。一般的に使用されるログファシリティには、以下のものがあります。

auth、authpriv、cron、daemon、kern、lpr、mail、news、syslog、user、ftp、uucp、security、local0~local7。また、システムログにも優先度の概念があり、図2に示すように、使用可能な優先度にはdebug(7)、info(6)、notice(5)、warning(4)、err(3)、crit(2)、alert(1)、emerg(0)が含まれます。

ファシリティ/優先度ベースのフィルターは最も一般的に使用される方法です。構文はFACILITY.PRIORITYで、図3に示すように、rsyslogのデフォルトルールです。

基本形式は、追加機能のない最もシンプルな設定形式です。設定のデフォルトの内容はこの形式です。

 # 邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录mail.* -/var/log/maillog # 邮件的错误信息转发到server.example.com,使用tcp连接(@@) mail.error @@server.example.com

高度なフォーマットで、より多くのモジュール、より多くのパラメータ、より多くのオプションをサポートし、ログのフォーマットやコンテンツなどのカスタマイズが可能です。

 # 邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录mail.* action(type="omfile" File="/var/log/maillog") # 邮件的错误信息转发到server.example.com,使用tcp连接(@@) mail.error action(type="omfwd" Target="server.example.com" Port="10514" Protocol="tcp")

rsyslog.conf ファイルには、ログの入力、出力、フィルタリング、およびフォーマットを指定するための操作も含まれています。rsyslog.conf 設定ファイルの詳細な説明は次のとおりです。

1.2.1 入力モジュールの設定

rsyslog.conf ファイルの入力モジュールは、ローカルログ、リモートログ、システムログなど、ログ情報を取得するソースを指定します。一般的に使用される入力モジュールには以下のものがあります。

  • imuxsock: Unix ドメイン ソケットからローカル ログ情報を読み取るために使用されます。
  • imudp: UDP プロトコルからリモート ログ情報を受信するために使用されます。
  • imtcp: TCP プロトコルからリモート ログ情報を受信するために使用されます。
  • imiournal: systemd-iournald サービスからシステム ログ情報を読み取るために使用されます。

1.2.2 フィルタリングモジュールの設定

rsyslog.conf ファイルのフィルタリングモジュールは、ルールに従ってログ情報をフィルタリングし、条件を満たすログ情報のみを保持するために使用されます。一般的に使用されるフィルタリングモジュールには、以下のものがあります。

  • if: 条件に基づいてログ情報をフィルタリングするために使用されます。
  • regex: 正規表現に基づいてログ情報をフィルタリングするために使用されます。
  • プロパティ: 属性に基づいてログ情報をフィルタリングするために使用されます。

1.2.3 出力モジュールの設定

rsyslog.conf ファイルの出力モジュールは、ファイル、データベース、ネットワークなど、ログメッセージの出力先を指定します。一般的に使用される出力モジュールには以下のものがあります。

  • omfile: ログ情報をファイルに出力するために使用されます。
  • ommysgl: ログ情報を MySQL データベースに出力するために使用されます。
  • omelasticsearch: Elasticsearch 検索アラートにログ情報を出力するために使用されます。
  • omfwd: ログ情報をリモート rsyslog サーバーに転送するために使用されます。

1.2.4 フォーマットモジュールの設定

rsyslg.conf ファイルのフォーマットモジュールは、時間、ホスト名、プロセス名、ログレベルなどのログ情報のフォーマットを指定します。一般的に使用されるフォーマットモジュールには以下のものがあります。

  • テンプレート: ログ情報の形式テンプレートを定義するために使用されます。
  • property: 時間、ホスト名、プロセス名など、ログ情報の属性を指定するために使用されます。
  • msg: ログ メッセージの内容を指定するために使用されます。

パート02、rsyslog転送

2.1 クライアント構成

クライアント側では、rsyslog設定ファイルでいくつか設定を行う必要があります。まず、送信先のホストとポート番号を指定する必要があります。これは、以下のように*.* @@<ターゲットホスト>:<ポート番号>と設定することで実現できます。

 *.* @@192.168.75.137:514 # tcp 协议*.* @192.168.75.137:514 # udp 协议

次に、特定の種類のログメッセージのみを対象システムに送信するフィルタリング条件を設定します。これは、「if $msg contains '<キーワード>' then @@<対象ホスト>:<ポート番号>」のようなステートメントを設定することで実現できます。最後に、送信プロトコルやタイムアウトなどの他のパラメータも設定できます。

2.2 サーバー構成

サーバー側では、転送されたログメッセージを受信して​​処理できるようにrsyslogサーバーを設定する必要があります。まず、rsyslogサーバーがリッスンするポート番号を設定します。次に、転送されたログメッセージの処理方法(ローカルファイルへの保存、データベースへの保存、他のシステムへの送信など)を設定ファイルで指定する必要があります。これは、設定ファイルに *.* /var/log/file のようなステートメントを設定することで実現できます。

 # provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 $AllowedSender tcp, 192.168.34.100/24 $template RemoteLogs,"/var/log/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log" *.* ?RemoteLogs 
  • $AllowedSender を使用すると、192.168.34.0 ネットワーク セグメント内のホストが TCP プロトコルを使用して送信できるかどうかを制御できます。
  • $template リモートはテンプレートを定義し、保存パスとファイル名をカスタマイズできます。また、異なるホストからのログを区別します。
  • $InputTCPServerRun 514 は TCP を有効にします。TCP と UDP は共存できます。

パート03、rsyslogの暗号化

rsyslogは、ログメッセージの転送に加えて、ログメッセージの送信を暗号化する機能も提供します。個人識別情報やパスワードなどの機密情報をパブリックネットワーク経由で送信する必要がある場合、暗号化された送信は特に重要になります。rsyslogはTLS/SSLプロトコルに基づく暗号化送信を提供し、送信中のログメッセージの機密性と整合性を確保します。図4は、暗号化されていない方法と暗号化された方法を使用したクライアントとサーバーの比較を示しています。

次に暗号化の方法を説明します。

ステップ1: gnutls-utilsをインストールする

yum install gnutls-utils

ステップ2: 証明書とキーを生成する

certtool --generate-privkey --outfile ca-key.pem --bits 2048 certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem --template ca.cfg

ステップ3: 各マシンに必要な証明書を生成して配布する

certtool --generate-privkey --outfile key.pem --sec-param 2048 certtool --generate-request --load-privkey key.pem --outfile request.pem certtool --generate-certificate --load-request request.pem --outfile cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem

ステップ4: rsyslogを構成する

$ DefaultNetstreamDriver gtls #证书文件$DefaultNetstreamDriverCAFile="/etc/rsyslog.d/gnutls/ca.pem" $DefaultNetstreamDriverCertFile="/etc/rsyslog.d/gnutls/server-cert.pem" $DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/gnutls/server-key.pem"

ステップ5: rsyslogサービスを再起動する

service rsyslog restart

パート04、アプリケーションシナリオ

アプリケーションシナリオ 1:複数のサーバーからのログを集約し、Kafka + ELK (Elasticsearch、Logstash、Kibana) を使用してフィルタリング、保存、分析し、複雑な検索および視覚化機能を提供します (図 1 を参照)。

アプリケーションシナリオ2:複数のサーバーからログを集約・保存した後、LogCheckはログファイルを監視・レビューし、システムログファイル内の特定のイベントやエラーをチェック・フィルタリングし、メールなどの手段でフィードバックを提供します。同時に、LogAnalyzerは様々なログデータを分析・可視化し、リアルタイム検索、フィルタリング、レポート作成、チャート表示などの機能を提供します。(図2参照)

パート05、要約

rsyslogは、信頼性、柔軟性、そして拡張性で知られる強力なログ管理ツールです。エンタープライズログ管理、アプリケーションのトラブルシューティング、セキュリティインシデントの監視など、rsyslogは堅牢なログ収集、フィルタリング、処理、そして保存機能を提供します。rsyslogを使用することで、ログデータの管理効率が向上し、システムの可用性、パフォーマンス、そしてセキュリティが向上します。