Apache Tomcat のログを収集する

パーサーのバージョン: 3.0

以下でサポートされています。

このドキュメントでは、Bindplane エージェントを使用して Apache Tomcat ログを Google Security Operations に取り込む方法について説明します。

Apache Tomcat は、HTTP リクエスト、認証イベント、サーバー アクティビティの JSON アクセスログを生成するウェブ アプリケーション サーバーです。パーサーは、JSON 形式と syslog 形式のログからフィールドを抽出し、統合データモデル(UDM)にマッピングします。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Windows Server 2016 以降、または systemd を使用する Linux ホスト
  • Tomcat サーバーにインストールされた Bindplane エージェント(ローカル ログファイルを読み取るため)
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • Tomcat サーバーに対する管理者権限

Bindplane エージェントの Google SecOps 認証情報を取得する

Bindplane エージェントを Google SecOps に対して認証するには、次のいずれかの方法を選択します。

  • 新しいデプロイ: Chronicle API(オプション 1)を使用します。
  • 以前のデプロイ: 2027 年 7 月 20 日に Ingestion API が廃止されるまで、取り込み認証ファイル(オプション 2)を引き続き使用します。
  1. Google Cloud コンソールにログインし、Google SecOps インスタンスにリンクされている Google Cloud プロジェクトを選択します。
  2. [IAM と管理> サービス アカウント] に移動します。
  3. [サービス アカウントを作成] をクリックします。
  4. 次の構成情報を指定します。
    • サービス アカウント名: アカウントの名前を入力します(例: bindplane-ingest)。
    • サービス アカウントの説明: 説明を入力します(例: Bindplane agent log ingestion)。
  5. [作成して続行] をクリックします。
  6. [このサービス アカウントにプロジェクトへのアクセスを許可する] セクションで、[ロールを選択] をクリックし、[Chronicle 編集者] を選択します。
  7. [続行] をクリックして [完了] をクリックします。
  8. 作成したサービス アカウントをクリックし、[キー] タブに移動します。
  9. [鍵を追加] > [新しい鍵を作成] の順にクリックします。
  10. [JSON] を選択し、[作成] をクリックします。鍵ファイルがパソコンにダウンロードされます。
  11. 鍵ファイルを Bindplane コレクタ ディレクトリ(Linux の場合は /opt/observiq-otel-collector/ingestion-auth.json、Windows の場合は C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)に ingestion-auth.json として保存するか、config.yaml の creds_file_path を保存先のパスと一致するように更新します。
  12. [IAM と管理] > [設定] に移動し、[プロジェクト番号] をコピーします。エクスポーターの構成に必要になります。

オプション 2: 取り込み認証ファイルをダウンロードする(レガシー)

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [収集エージェント] に移動します。
  3. 取り込み認証ファイルをダウンロードします。
  4. Bindplane エージェントがインストールされるシステムにファイルを安全に保存します。

Google SecOps のお客様 ID を取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [プロファイル] に移動します。
  3. [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。

Tomcat サーバーに Bindplane エージェントをインストールしてログファイルを収集する

Bindplane エージェントは、ローカル ログファイルを読み取る必要があるため、Tomcat サーバー自体にインストールします。

Windows へのインストール

  1. 管理者としてコマンド プロンプトまたは PowerShell を開きます。
  2. 次のコマンドを実行します。

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sc query observiq-otel-collector
    

    サービスは RUNNING と表示されます。

Linux のインストール

  1. root 権限または sudo 権限でターミナルを開きます。
  2. 次のコマンドを実行します。

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sudo systemctl status observiq-otel-collector
    

    サービスは active (running) と表示されます。

その他のインストール リソース

その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。

Tomcat ログを取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

構成ファイルを探します。

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

構成ファイルを編集します。

  • config.yaml の内容全体を次の構成に置き換えます。

    receivers:
      filelog/tomcat:
        include:
          - /path/to/tomcat/logs/access-log.*.json
        start_at: beginning
    
    exporters:
      chronicle/tomcat:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: TOMCAT
        raw_log_field: body
    
    service:
      pipelines:
        logs/tomcat_to_chronicle:
          receivers:
            - filelog/tomcat
          exporters:
            - chronicle/tomcat
    

構成パラメータ

各プレースホルダを次のように置き換えます。

  • レシーバーの構成:

    • include: Tomcat JSON アクセスログ ファイルのパス。Tomcat のログ ディレクトリとファイル パターンに合わせて調整します。
    • start_at: 既存のログを読み取る場合は beginning に設定し、新しいエントリのみを読み取る場合は end に設定します。
  • エクスポータの構成:

    • creds_file_path: サービス アカウントの JSON キーファイルのフルパス(オプション 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: Google SecOps コンソールからコピーしたお客様 ID
    • location: <LOCATION> は、Google SecOps インスタンスのリージョン(us、europe、asia-southeast1 など)に置き換えます。エクスポーターは、chronicle.googleapis.com の先頭にこの値を付加します。完全なリストについては、リージョン エンドポイントをご覧ください。
    • project: <PROJECT_NUMBER> を [IAM と管理] > [設定] のプロジェクト番号に置き換えます。
    • endpoint: chronicle.googleapis.com に設定したままにします。

以前の Ingestion API エクスポータ

  • オプション 2 の取り込み認証ファイルを使用する場合は、exporters ブロックを次のように置き換えます。creds_file_path を取り込み認証ファイルのパスに設定します。インスタンスが米国以外にある場合は、malachiteingestion-pa.googleapis.com をリージョン エンドポイント(europe-malachiteingestion-pa.googleapis.com など)に置き換えます。

    exporters:
      chronicle/tomcat:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: TOMCAT
        raw_log_field: body
    

構成ファイルを保存する

  • 編集後、ファイルを保存します。
    • Linux: Ctrl+O、Enter、Ctrl+X の順に押します。
    • Windows の場合: [ファイル] > [保存] をクリックします。

Bindplane エージェントを再起動して変更を適用する

  • Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。

    sudo systemctl restart observiq-otel-collector
    
    1. サービスが実行されていることを確認します。

      sudo systemctl status observiq-otel-collector
      
    2. ログでエラーを確認します。

      sudo journalctl -u observiq-otel-collector -f
      
  • Windows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を開きます。

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • サービス コンソール:

      1. Win+R を押し、「services.msc」と入力して Enter キーを押します。
      2. observIQ OpenTelemetry Collector を見つけます。
      3. 右クリックして [再起動] を選択します。
      4. サービスが実行されていることを確認します。

        sc query observiq-otel-collector
        
      5. ログでエラーを確認します。

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Tomcat で JSON アクセスログを構成する

  1. $CATALINA_BASE/conf/server.xml にある Tomcat 構成ファイルを開きます。
  2. <Host> タグを見つけ、その中に次のコードを追加します。

    <Valve className="org.apache.catalina.valves.JsonAccessLogValve"
           directory="logs"
           prefix="access-log"
           suffix=".json"
           rotatable="true"
           maxDays="7"/>
    
  3. Tomcat を再起動して変更を適用します。

    cd /path/to/tomcat
    bin/catalina.sh stop
    bin/catalina.sh start
    
  4. 新しい JSON ログファイルが毎日表示されます(例: logs/access-log.2025-07-02.json)。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
@timestamp metadata.event_timestamp 未加工ログの @timestamp の値は、この UDM フィールドに直接マッピングされます。イベントが発生した時刻を表します。
agent.ephemeral_id additional.fields[ephemeral_id].value.string_value エージェントのエフェメラル ID は、additional フィールドに Key-Value ペアとして追加されます。
agent.hostname observer.hostname エージェントのホスト名はオブザーバーのホスト名として使用されます。
agent.id observer.asset_id エージェント ID はエージェント タイプと組み合わされて、オブザーバー アセット ID(filebeat: <agent_id> など)が作成されます。
agent.type observer.application エージェント タイプは、オブザーバー アプリケーションとして使用されます。
agent.version observer.platform_version エージェントのバージョンは、オブザーバー プラットフォームのバージョンとして使用されます。
host.hostname principal.hostname ホストのホスト名がプリンシパル ホスト名として使用されます。
host.id principal.asset.asset_id ホスト ID の先頭に Host Id: が付加され、プリンシパル アセット ID が作成されます。
host.ip principal.ip、observer.ip ホストの IP アドレスは、プリンシパル IP とオブザーバー IP の両方に使用されます。複数の IP が存在する場合は、配列に統合されます。
host.mac principal.mac ホストの MAC アドレスがプリンシパル MAC アドレスとして使用されます。複数の MAC が存在する場合は、配列にマージされます。
host.os.family principal.platform ホスト OS ファミリーが rhel または redhat の場合、プリンシパル プラットフォームは LINUX に設定されます。
host.os.kernel principal.platform_patch_level ホスト OS のカーネル バージョンが、主要なプラットフォーム パッチレベルとして使用されます。
host.os.name additional.fields[os_name].value.string_value ホスト OS 名は、additional フィールドに Key-Value ペアとして追加されます。
host.os.version principal.platform_version ホスト OS のバージョンは、プリンシパル プラットフォームのバージョンとして使用されます。
log.file.path principal.process.file.full_path ログパスは、プリンシパル プロセス ファイルのフルパスとして使用されます。
log_level security_result.severity、security_result.severity_details、security_result.action ログレベルは、セキュリティ結果の重大度、重大度の詳細、アクションを決定するために使用されます。DEBUG、INFO、AUDIT は、INFORMATIONAL の重大度と ALLOW アクションにマッピングされます。ERROR は ERROR 重大度と BLOCK アクションにマッピングされます。WARNING と WARN は、MEDIUM の重大度と BLOCK アクションにマッピングされます。未加工の log_level 値も severity_details にマッピングされます。
logstash.irm_environment additional.fields[irm_environment].value.string_value Logstash の Iron Mountain 環境は、additional フィールドに Key-Value ペアとして追加されます。
logstash.irm_region additional.fields[irm_region].value.string_value Logstash の Iron Mountain リージョンは、additional フィールドに Key-Value ペアとして追加されます。
logstash.irm_site additional.fields[irm_site].value.string_value Logstash の Iron Mountain サイトは、additional フィールドに Key-Value ペアとして追加されます。
logstash.process.host intermediary.hostname Logstash 処理ホストが中間ホスト名として使用されます。
logstash.process.timestamp metadata.collected_timestamp Logstash の処理タイムスタンプが、収集されたタイムスタンプとして使用されます。
logstash.xyz_environment additional.fields[xyz_environment].value.string_value Logstash の xyz 環境が additional フィールドに Key-Value ペアとして追加されます。
logstash.xyz_region additional.fields[xyz_region].value.string_value Logstash の xyz リージョンは、additional フィールドに Key-Value ペアとして追加されます。
logstash.xyz_site additional.fields[xyz_site].value.string_value Logstash の xyz サイトは、additional フィールドに Key-Value ペアとして追加されます。
message metadata.description メッセージ フィールドは JSON として解析され、その event_message フィールドはメタデータの説明として使用されます。仲介アプリケーションは logstash にハードコードされています。メタデータ イベントタイプは USER_UNCATEGORIZED にハードコードされています。メタデータ ログタイプは、未加工ログの batch.type または batch.log_type から TOMCAT に設定されます。メタデータ プロダクト名は Tomcat にハードコードされています。メタデータ ベンダー名は Tomcat にハードコードされています。
user principal.user.userid 未加工ログのユーザー フィールドがプリンシパル ユーザー ID として使用されます。
product_event metadata.product_event_type 変更履歴からマッピング
summary security_result.summary 変更履歴からマッピング
query additional.fields 変更履歴からマッピング

変更ログ

このパーサーの変更ログを表示する

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。