Logstash を使用して HTTP Data Collection API でログをストリーミングする (レガシ)

重要

Logstash 出力プラグインを使用したデータ インジェストは、現在パブリック プレビューの段階にあります。 この機能はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

Note

さらに新しいバージョンの Logstash プラグインでは、DCR ベースの API を使って、外部データ ソースからカスタムと標準のテーブルにログを転送できます。 新しいプラグインを使うと、列名と型の構成など、出力スキーマを完全に制御できます。

Logstash データ収集エンジン用の Microsoft Sentinel の出力プラグインを使用することで、Logstash 経由で任意の種類のログを Microsoft Sentinel の Log Analytics ワークスペースに直接送信できます。 ログは、ユーザーが出力プラグインを使って定義したカスタム テーブルに送信されます。 このバージョンのプラグインでは、HTTP Data Collection API が使われます。

Logstash データ収集エンジンの操作の詳細については、Logstash の概要に関するページをご覧ください。

概要

アーキテクチャと背景

Diagram of the Logstash architecture.

Logstash エンジンは、次の 3 つのコンポーネントで構成されています。

  • 入力プラグイン:さまざまなソースのデータのカスタマイズされたコレクション。
  • フィルター プラグイン:指定した条件に従ったデータの操作と正規化。
  • 出力プラグイン:収集および処理されたデータのさまざまな宛先へのカスタマイズされた送信。

Note

  • Microsoft では、ここで説明する、Microsoft Sentinel で提供される Logstash 出力プラグインのみをサポートしています。 このプラグインの現在のバージョンは、2020-08-25 にリリースされた v1.0.0 です。 出力プラグインに関する問題については、サポート チケットを開くことができます。

  • Microsoft では、Microsoft Sentinel 用のサード パーティ製 Logstash 出力プラグインや、その他の種類の Logstash プラグインやコンポーネントをサポートしていません。

  • Microsoft Sentinel の Logstash 出力プラグインでサポートされるのは、Logstash のバージョン 7.0 から 7.17.10 までと、バージョン 8.0 から 8.9 まで、及び 8.11 のみです。 Logstash 8 を使う場合は、パイプラインで ECS を無効にすることをお勧めします。

Logstash 用の Microsoft Sentinel 出力プラグインでは、Log Analytics HTTP データ コレクター REST API を使用して、JSON 形式のデータを Log Analytics ワークスペースに送信します。 データはカスタム ログに取り込まれます。

Logstash で Microsoft Sentinel 出力プラグインをデプロイする

手順 1:インストール

Microsoft Sentinel 出力プラグインは、Logstash コレクションで使用できます。

  • Logstash のプラグインの操作に関するドキュメントに記載されている手順に従って、microsoft-logstash-output-azure-loganalytics プラグインをインストールします。

  • Logstash システムがインターネットにアクセスできない場合は、Logstash のオフライン プラグイン管理に関するドキュメントに記載されている手順に従って、オフライン プラグイン パックを準備して使用します。 (この場合、インターネットにアクセスできる別の Logstash システムを構築する必要があります)。

手順 2:構成

Logstash の構成ファイルの構造に関するドキュメントの情報を使用して、次のキーと値を使用して Microsoft Sentinel 出力プラグインを構成に追加します。 (適切な構成ファイルの構文は表の後に示しています)。

フィールド名 データ型 Description
workspace_id string ワークスペース ID GUID を入力します (ヒントを参照)。
workspace_key string ワークスペースの主キー GUID を入力します (ヒントを参照)。
custom_log_table_name string ログが取り込まれるテーブルの名前を設定します。 構成できるのは、出力プラグインごとに 1 つのテーブル名だけです。 ログ テーブルは、Microsoft Sentinel の [ログ] の下の [カスタム ログ] カテゴリの [テーブル]_CL サフィックス付きで表示されます。
endpoint string 省略可能なフィールド。 既定では、これは Log Analytics エンドポイントです。 代替エンドポイントを設定するには、このフィールドを使用します。
time_generated_field string 省略可能なフィールド。 このプロパティは Log Analytics の既定の TimeGenerated フィールドよりも優先されます。 データ ソースのタイムスタンプ フィールドの名前を入力します。 フィールドのデータは、ISO 8601 形式 (YYYY-MM-DDThh:mm:ssZ) に準拠している必要があります
key_names array Log Analytics 出力スキーマ フィールドの一覧を入力します。 各リスト項目は、単一引用符で囲み、項目をコンマで区切り、リスト全体を角かっこで囲む必要があります。 以下の例を参照してください。
plugin_flush_interval 数値 省略可能なフィールド。 Log Analytics へのメッセージの転送間の最大間隔 (秒) を定義するように設定します。 既定値は 5 です。
amount_resizing boolean true または false 自動スケーリング メカニズムを有効または無効にします。これにより、受信したログ データの量に応じてメッセージ バッファー サイズが調整されます。
max_items 数値 省略可能なフィールド。 amount_resizing が "false" に設定されている場合にのみ適用されます。メッセージ バッファー サイズ (レコード単位) の上限の設定に使用します。 既定値は 2000 です。
azure_resource_id string 省略可能なフィールド。 データが存在する Azure リソースの ID を定義します。
リソース ID 値は特に、リソースコンテキスト RBAC を使用して特定のデータへのアクセスのみを許可する場合に便利です。

ヒント

  • ワークスペース ID と主キーは、ワークスペース リソースの [エージェント管理] で確認できます。
  • ただし、資格情報やその他の機密情報を構成ファイルにクリアテキストで格納することは、セキュリティのベスト プラクティスに沿っていないため、構成にワークスペース IDワークスペースの主キーを安全に含めるために、Logstash キー ストアを利用することを強くお勧めします。 手順については、Elastic のドキュメントを参照してください。

サンプルの構成

いくつかの異なるオプションを使用するいくつかのサンプル構成を次に示します。

  • filebeat 入力パイプを使用する基本構成:

      input {
          beats {
              port => "5044"
          }
      }
      filter {
      }
      output {
          microsoft-logstash-output-azure-loganalytics {
            workspace_id => "<your workspace id>"
            workspace_key => "<your workspace key>"
            custom_log_table_name => "tableName"
          }
      }
    
  • tcp 入力パイプを使用する基本構成:

      input {
          tcp {
              port => "514"
              type => syslog #optional, will effect log type in table
          }
      }
      filter {
      }
      output {
          microsoft-logstash-output-azure-loganalytics {
            workspace_id => "<your workspace id>"
            workspace_key =>  "<your workspace key>"
            custom_log_table_name => "tableName"
          }
      }
    
  • 高度な構成:

      input {
          tcp {
              port => 514
              type => syslog
          }
      }
      filter {
          grok {
              match => { "message" => "<%{NUMBER:PRI}>1 (?<TIME_TAG>[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[^ ]* (?<HOSTNAME>[^ ]*) %{GREEDYDATA:MSG}" }
          }
      }
      output {
          microsoft-logstash-output-azure-loganalytics {
              workspace_id => "<WS_ID>"
              workspace_key => "${WS_KEY}"
              custom_log_table_name => "logstashCustomTable"
              key_names => ['PRI','TIME_TAG','HOSTNAME','MSG']
              plugin_flush_interval => 5
          }
      } 
    
  • 非構造化テキスト データからカスタム timestampと JSON 文字列を解析し、選択した一連のフィールドを抽出されたtimestampで Log Analytics にログ記録するための、より高度な構成:

      # Example log line below:
      # Mon Nov 07 20:45:08 2022: { "name":"_custom_time_generated", "origin":"test_microsoft", "sender":"test@microsoft.com", "messages":1337}
      # take an input
      input {
          file {
              path => "/var/log/test.log"
          }
      }
      filter {
      # extract the header timestamp and the Json section
          grok {
              match => {
                  "message" => ["^(?<timestamp>.{24}):\s(?<json_data>.*)$"]
              }
          }
      # parse the extracted header as a timestamp
      date {
          id => 'parse_metric_timestamp'
              match => [ 'timestamp', 'EEE MMM dd HH:mm:ss yyyy' ]
              timezone => 'Europe/Rome'
              target => 'custom_time_generated'
          }
      json {
          source => "json_data"
          }
      }
      # output to a file for debugging (optional)
      output {
          file {
              path => "/tmp/test.txt"
              codec => line { format => "custom format: %{message} %{custom_time_generated} %{json_data}"}
          }
      }
      # output to the console output for debugging (optional)
      output {
          stdout { codec => rubydebug }
      }
      # log into Log Analytics
      output {
          microsoft-logstash-output-azure-loganalytics {
              workspace_id => '[REDACTED]'
              workspace_key => '[REDACTED]'
              custom_log_table_name => 'RSyslogMetrics'
              time_generated_field => 'custom_time_generated'
              key_names => ['custom_time_generated','name','origin','sender','messages']
          }
      }
    

    Note

    内部の動作、構成、およびパフォーマンス設定の詳細については、出力プラグインの GitHub リポジトリをご覧ください。

手順 3:Logstash を再起動する

手順 4: Microsoft Sentinel で受信ログを表示する

  1. メッセージが出力プラグインに送信されていることを確認します。

  2. Microsoft Sentinel ナビゲーション メニューから [ログ] を選択します。 [テーブル] 見出しの下にある [カスタム ログ] カテゴリを展開します。 構成で (_CL サフィックスで) 指定したテーブルの名前を見つけてクリックします。

    Screenshot of log stash custom logs.

  3. テーブルのレコードを表示するには、テーブル名をスキーマとして使用して、テーブルに対してクエリを実行します。

    Screenshot of a log stash custom logs query.

出力プラグインの監査ログを監視する

Microsoft Sentinel 出力プラグインの接続とアクティビティを監視するには、適切な Logstash ログ ファイルを有効にします。 ログ ファイルの場所については、Logstash ディレクトリ レイアウトに関するドキュメントをご覧ください。

このログ ファイルにデータが表示されない場合は、いくつかのイベントをローカルで生成して送信し (入力プラグインとフィルター プラグインを使用)、出力プラグインがデータを受信していることを確認します。 Microsoft Sentinel では、出力プラグインに関連する問題のみがサポートされます。

次のステップ

このドキュメントでは、Logstash を使用して外部データ ソースを Microsoft Sentinel に接続する方法について説明しました。 Microsoft Sentinel の詳細については、次の記事を参照してください。