22.6. Rsyslog モジュールの使用

モジューラーの設計上、rsyslog は、追加の機能が含まれる各種 モジュール を提供します。モジュールはサードパーティーによる書き込みが可能であることに注意してください。ほとんどのモジュールは、追加入力 (以下の 入力モジュール 参照) または出力 (以下の 出力モジュール 参照) を提供します。その他のモジュールは、各モジュールに固有の機能を提供します。モジュールは、モジュールの読み込み後に利用可能になる追加の設定ディレクティブを提供する場合があります。モジュールを読み込むには、以下の構文を使用します。
module(load=”MODULE”)
MODULE は希望のモジュールを表します。たとえば、rsyslog を有効にして標準テキストファイルを syslog メッセージに変換する Text File Input Module (imfile) を読み込む場合は、/etc/rsyslog.conf 設定ファイルの以下の行を指定します。
module(load=”imfile”)
rsyslog は多くのモジュールを提供し、これらは以下の主なカテゴリーに分けられます。
  • 入力モジュール - 入力モジュールは、様々なソースからメッセージを収集します。入力モジュールの名前は、常に imfileimjournal のように接頭辞 im で始まります。
  • 出力モジュール - 出力モジュールはメッセージをネットワーク上に送信したり、データベース内に保存したり、暗号化するなど、様々なターゲットにメッセージを発行するための機能を提供します。出力モジュールの名前は常に omsnmpomrelp などのように接頭辞 om で始まります。
  • パーサーモジュール - これらのモジュールは、カスタムの解析ルールの作成や不正な形式のメッセージ解析に使用されます。C プログラミング言語についてある程度の知識があれば、独自のメッセージパーサーが作成できます。パーサーモジュールの名前は常に pmrfc5424pmrfc3164 のように接頭辞 pm で始まります。
  • メッセージ修正モジュール - メッセージ修正モジュールは、syslog メッセージの内容を変更します。このモジュールの名前は、mm 接頭辞で始まります。mmanonmmnormalizemmjsonparse といったメッセージ修正モジュールは、メッセージの匿名化や正常化に使用されます。
  • 文字列生成モジュール - 文字列生成モジュールは、メッセージ内容を基にして文字列を生成し、rsyslog で用意されているテンプレート機能と密接に機能します。テンプレートに関する詳細情報は 「テンプレート」 を参照してください。文字列生成モジュールの名前は、smfilesmtradfile のように常に接頭辞 sm で始まります。
  • ライブラリーモジュール - ライブラリーモジュールは、他の読み込み可能なモジュール用の機能を提供します。これらのモジュールは、必要であるのにユーザーが設定できない場合に rsyslog が自動的に読み込みます。
利用可能なモジュールの一覧と、そのモジュールの詳しい説明は、rsyslog のドキュメンテーション を参照してください。

警告

rsyslog はモジュールを読み込む際に、モジュールに対して一部の機能とデータへのアクセスを提供します。これはセキュリティー上の脅威となる可能性があります。セキュリティーリスクを最小限にするために、信頼できるモジュールのみを使用するようにしてください。

22.6.1. テキストファイルのインポート

テキストファイル入力モジュールは imfile と省略され、rsyslog がテキストファイルを syslog メッセージのストリームに変換できるようにします。imfile を使用して、独自のテキストファイルログを作成するアプリケーションからログメッセージをインポートできます。imfile を読み込むには、/etc/rsyslog.conf に以下を追加します。
        module(load=”imfile”
        				PollingInterval=”int”)
複数のファイルをインポートする場合でも、imfile を一度読み込むだけで十分です。PollingInterval モジュール引数は、接続済みテキストファイルの変更に対してrsyslog チェックをどのくらいの頻度で行うか指定します。デフォルトの間隔は 10 秒で、変更するには int を秒で指定した時間間隔に置き換えます。
インポートするテキストファイルを特定するには、/etc/rsyslog.conf で以下の構文を使用します。
# File 1
input(type="imfile"
      File="path_to_file"
      Tag="tag:"
      Severity="severity"
      Facility="facility")

# File 2
input(type="imfile"
      File="path_to_file2")
...
入力テキストファイルを指定するために必要な設定:
  • path_to_file をテキストファイルへのパスに置き換えます。
  • tag: をこのメッセージのタグ名に置き換えます。
必要なディレクティブ以外に、テキスト入力に適用可能な設定がいくつかあります。severity を適切なキーワードで置き換えて、インポートされたメッセージの重要度を設定します。facility を、メッセージを作成したサブシステムを定義するキーワードに置き換えます。重要度と機能のキーワードは、機能または優先度ベースのフィルターで使用されたものと同じものです (「フィルター」 を参照)。

例22.15 テキストファイルのインポート

Apache HTTP サーバーはテキスト形式でログファイルを作成します。rsyslog の処理機能を apache エラーメッセージに適用するには、まず imfile モジュールを使用してメッセージをインポートします。/etc/rsyslog.conf に以下を追加します。
module(load=”imfile”)
input(type="imfile"
      File="/var/log/httpd/error_log"
      Tag="apache-error:")

22.6.2. データベースへのメッセージのエクスポート

ログデータの処理は、テキストファイルではなくデータベース内で実行するとより速く、より便利なものになります。使用される DBMS のタイプに基づいて、ommysqlompgsqlomoracleommongodb などの出力モジュールを選択します。別の方法としては、libdbi ライブラリーに依存する一般的な omlibdbi 出力モジュールを使用します。omlibdbi モジュールは、Firebird/Interbase、MS SQL、Sybase、SQLite、Ingres、Oracle、mSQL、MySQL、および PostgreSQL のデータベースシステムをサポートします。

例22.16 データベースへの rsyslog メッセージのエクスポート

rsyslog メッセージを MySQL データベースに保存するには、/etc/rsyslog.conf に以下を追加します。
module(load=”ommysql”)

*.*  action(type”ommysql”
server=”database-server”
db=”database-name”
uid=”database-userid”
pwd=”database-password”
serverport=”1234”)
最初に出力モジュールが読み込まれ、その後に通信ポートが指定されます。上記の例では、サーバー名、データベース名、認証データなどの追加情報は、最後の行で指定されています。

22.6.3. 暗号化トランスポートの有効化

ネットワーク転送の機密性と統合性は、TLS または GSSAPI 暗号化プロトコルのいずれかによって提供されます。
Transport Layer Security (TLS) は、ネットワーク上の通信セキュリティーを提供するために設計された暗号プロトコルです。TLS を使用すると、rsyslog メッセージは送信前に暗号化され、送信者と受信者間で相互認証が行われます。TLS の設定は 「TLS を使用した暗号化メッセージ転送の設定」 を参照してください。
Generic Security Service API (GSSAPI) は、プログラムがセキュリティサービスにアクセスするためのアプリケーションプログラミングインターフェースです。rsyslog と接続して使用するには、機能している Kerberos 環境が必要です。GSSAPI を設定するには 「GSSAPI を使用した暗号化メッセージ転送の設定」 を参照してください。

TLS を使用した暗号化メッセージ転送の設定

TLS を経由して暗号化トランスポートを使用するには、サーバーとクライアント両方を設定する必要があります。
  1. 公開鍵、秘密鍵、証明書ファイルを作成し、「新しい鍵と証明書の生成」 を参照します。
  2. サーバー 側で、/etc/rsyslog.conf 設定ファイルで以下を設定します。
    1. gtls netstream ドライバーをデフォルトドライバーに設定します。
      global(defaultnetstreamdriver="gtls")
    2. 証明書ファイルへのパスを指定します。
      global(defaultnetstreamdrivercafile="path_ca.pem"
      defaultnetstreamdrivercertfile="path_cert.pem"
      defaultnetstreamdriverkeyfile="path_key.pem")
      簡潔な設定ファイルを好む場合は、グローバルディレクティブをすべて 1 つのブロックに統合できます。
      以下を置き換えます。
      • path_ca.pem を、公開鍵へのパスに置き換え
      • path_cert.pem を、証明書ファイルへのパスに置き換え
      • path_key.pem を、秘密鍵へのパスに置き換え
    3. imtcp モジュールを読み込み、ドライバーオプションを設定します。
      module(load=”imtcp”
      StreamDriver.Mode=“number”
      StreamDriver.AuthMode=”anon”)
    4. サーバーを起動します。
      input(type="imtcp" port="port″)
      以下を置き換えます。
      • number はドライバーモードを指定します。TCP オンリーモードを有効にするには、1 を使用します。
      • port を、リスナーを起動するポート番号に置き換えます。たとえば 10514 にします。
      anon 設定は、クライアントが認証されていないことを意味します。
  3. クライアント 側の /etc/rsyslog.conf 設定ファイルで以下を設定します。
    1. 公開鍵を読み込みます。
      global(defaultnetstreamdrivercafile="path_ca.pem")
      path_ca.pem を公開鍵へのパスで置き換えます。
    2. gtls netstream ドライバーをデフォルトドライバーに設定します。
       global(defaultnetstreamdriver="gtls")
    3. ドライバーを設定し、実行するアクションを指定します。
      module(load=”imtcp”
          streamdrivermode=”number”
          streamdriverauthmode=”anon”)
      input(type=”imtcp”
          address=”server.net”
          port=”port”)
      numberanonport を、サーバーと同じ値に置き換えます。
      上記一覧の最後の行で、例のアクションがサーバーから指定の TCP ポートにメッセージを転送します。

GSSAPI を使用した暗号化メッセージ転送の設定

rsyslog では、GSSAPI とのやり取りは imgssapi モジュールによって提供されます。GSSAPI 転送モードをオンにするには、以下を実行します。
  1. /etc/rsyslog.conf に以下の設定をします。
    $ModLoad imgssapi
    このディレクティブは、imgssapi モジュールを読み込みます。
  2. 以下のように入力を指定します。
    $InputGSSServerServiceName name
    $InputGSSServerPermitPlainTCP on
    $InputGSSServerMaxSessions number
    $InputGSSServerRun port
    • name を、GSS サーバーの名前に置き換えます。
    • number を置き換え、サポートされる最大セッション数を設定します。デフォルトで、この数字は制限されていません。
    • port を、GSS サーバーを起動したい選択ポートに置き換えます。
    $InputGSSServerPermitPlainTCP on 設定により、サーバーは同じポートでプレーン TCP メッセージを受信できます。デフォルトでオフになっています。

注記

設定ファイルリーダーが /etc/rsyslog.conf 設定ファイルで $InputGSSServerRun ディレクティブに遭遇すると、imgssapi モジュールはすぐに初期化されます。このため、$InputGSSServerRun より後に設定されている補助オプションは無視されます。設定を有効にするには、すべての imgssapi 設定オプションを、$InputGSSServerRun の前に配置する必要があります。

例22.17 GSSAPI の使用

以下の設定では、ポート 1514 上の GSS サーバーが有効になります。この設定では、同一ポート上でプレーンの tcp syslog メッセージの受信も許可されます。
$ModLoad imgssapi
$InputGSSServerPermitPlainTCP on
$InputGSSServerRun 1514

22.6.4. RELP の使用

Reliable Event Logging Protocol (RELP) は、コンピューターネットワークにおけるデータロギング用のネットワーキングプロトコルです。信頼性のあるイベントメッセージの配信を提供するように設計されています。これは、メッセージ損失が許されない環境で便利なものです。

RELP の設定

RELP を設定するには、/etc/rsyslog.conf ファイルを使用してサーバーとクライアントの両方を設定します。
  1. クライアントを設定するには、以下を実行します。
    1. 必須モジュールを読み込みます。
      module(load="imuxsock")
      module(load="omrelp")
      module(load="imtcp")
    2. 以下のように TCP 入力を設定します。
      input(type="imtcp" port="port″)
      port を、必要なポートに置き換えてリスナーを開始します。
    3. トランスポート設定を構成します。
      action(type="omrelp" target="target_IP″ port="target_port″)
      target_IPtarget_port をターゲットサーバーを識別する IP アドレスとポートに置き換えます。
  2. サーバーを設定するには、以下を実行します。
    1. モジュールの読み込みを設定します。
      module(load="imuxsock")
      module(load="imrelp" ruleset="relp")
    2. クライアント設定と同様の TCP 入力を設定します。
      input(type="imrelp" port="target_port″)
      target_port をクライアントと同じ値に置き換えます。
    3. ルールを設定し、実行するアクションを選択します。次の例では、log_path はメッセージを保存するためのパスを指定しています。
      ruleset (name="relp") {
      action(type="omfile" file="log_path")
      }

TLS を使用した RELP の設定

TLS を使用して RELP を設定するには、認証を設定する必要があります。続いて、/etc/rsyslog.conf ファイルを使用してサーバーとクライアントの両方を設定する必要があります。
  1. 公開鍵、秘密鍵、証明書ファイルを作成します。詳細な説明は 「新しい鍵と証明書の生成」 を参照してください。
  2. クライアントを設定するには、以下を実行します。
    1. 必須モジュールを読み込みます。
      module(load="imuxsock")
      module(load="omrelp")
      module(load="imtcp")
    2. 以下のように TCP 入力を設定します。
      input(type="imtcp" port="port″)
      port を、必要なポートに置き換えてリスナーを開始します。
    3. トランスポート設定を構成します。
      action(type="omrelp" target="target_IP″ port="target_port″ tls="on"
      tls.caCert="path_ca.pem"
      tls.myCert="path_cert.pem"
      tls.myPrivKey="path_key.pem"
      tls.authmode="mode"
      tls.permittedpeer=["peer_name"]
      )
      以下を置き換えます。
      • target_IPtarget_port を、ターゲットサーバーを識別する IP アドレスとポートにそれぞれ置き換えます。
      • path_ca.pempath_cert.pem、および path_key.pem を、証明書ファイルのパスに置き換えます。
      • mode を、トランザクションの認証モードに置き換えます。"name" または "fingerprint" のいずれかを使用します。
      • peer_name を、許可されたピアの証明書フィンガープリントに置き換えます。これを指定した場合、tls.permittedpeer は、選択したピアグループへの接続を制限します。
      tls="on" の設定は、TLS プロトコルを有効にします。
  3. サーバーを設定するには、以下を実行します。
    1. モジュールの読み込みを設定します。
      module(load="imuxsock")
      module(load="imrelp" ruleset="relp")
    2. クライアント設定と同様の TCP 入力を設定します。
      input(type="imrelp" port="target_port″ tls="on"
      tls.caCert="path_ca.pem"
      tls.myCert="path_cert.pem"
      tls.myPrivKey="path_key.pem"
      tls.authmode="name"
      tls.permittedpeer=["peer_name","peer_name1","peer_name2"]
      )
      強調した値をクライアントと同じものに置き換えます。
    3. ルールを設定し、実行するアクションを選択します。次の例では、log_path はメッセージを保存するためのパスを指定しています。
      ruleset (name="relp") {
      action(type="omfile" file="log_path")
      }