すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Service Mesh:データプレーンのアクセスログのカスタマイズ

最終更新日:Jan 14, 2025

KubernetesクラスターをService Mesh (ASM) インスタンスに追加すると、ASMインスタンスのデータプレーンにデプロイされたEnvoyプロキシは、クラスターのすべてのアクセスログを印刷できます。 ASMを使用すると、Envoyプロキシによって印刷されるアクセスログのフィールドをカスタマイズできます。 このトピックでは、アクセスログのフィールドをカスタマイズする方法について説明します。

前提条件

ステップ1: アクセスログの有効化

1.17.2.35より前のバージョンのASMインスタンスの場合

  1. ASMコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[ASMインスタンス] > [ベース情報] を選択します。

  3. 表示されるページの右上隅で、設定.

  4. では、設定の更新パネル、選択アクセスログを有効にしてコンテナーstdoutに印刷するをクリックし、OK.

    デフォルトでは、istio-proxyコンテナは次のフィールドを含むログを出力します。 アクセスログが無効になっている場合、istio-proxyコンテナーはアクセスログをJSON形式で出力しません。

    ログの詳細を表示

    
        "authority_for":"% REQ(:AUTHORITY)%" 、
        "bytes_received":"% BYTES_RECEIVED %" 、
        "bytes_sent":"% BYTES_SENT %" 、
        "downstream_local_address":"% DOWNSTREAM_LOCAL_ADDRESS %" 、
        "downstream_remote_address":"% DOWNSTREAM_REMOTE_ADDRESS %" 、
        "duration":"% DURATION %" 、
        "istio_policy_status":"% DYNAMIC_METDATA (istio.mixer:status)%" 、
        "method":"% REQ(:METHOD)%" 、
        "path":"% REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%" 、
        "protocol":"% PROTOCOL %" 、
        "request_id":"% REQ(X-REQUEST-ID)%" 、
        "requested_server_name":"% REQUESTED_SERVER_NAME %" 、
        "response_code":"% RESPONSE_CODE %" 、
        "response_flags":"% RESPONSE_FLAGS %" 、
        "route_name":"% ROUTE_NAME %" 、
        "start_time":"% START_TIME %" 、
        "trace_id":"% REQ(X-B3-TRACEID)%" 、
        "upstream_cluster":"% UPSTREAM_CLUSTER %" 、
        "upstream_host":"% UPSTREAM_HOST %" 、
        "upstream_local_address":"% UPSTREAM_LOCAL_ADDRESS %" 、
        "upstream_service_time":"% RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%" 、
        "upstream_transport_failure_reason":"% UPSTREAM_TRANSPORT_FAILURE_REASON %" 、
        "user_agent":"% REQ(USER-AGENT)%" 、
        "x_forwarded_for":"% REQ(X-FORWARDED-FOR)%" 

バージョン1.17.2.35以降のASMインスタンスの場合

  1. ASMコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[Observability Management Center] > [Observability Settings] を選択します。

  3. [Observability Settings] ページで、[Global][Namespace] 、または [Custom] タブをクリックします。

    • [名前空間] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択します。

    • [カスタム] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択し、[名前][マッチングラベル] を設定します。

  4. [ログ設定] セクションで、[ログ出力の有効化] スイッチをオンにし、[送信] をクリックします。

    スイッチをオンにすると、ASMインスタンスのデータプレーン上のサイドカープロキシまたはゲートウェイは、コンテナの標準出力へのアクセスログを印刷します。 ASMはログフィルター機能もサポートしています。 詳細については、「オブザーバビリティ設定の設定」トピックのログのフィルタリングをご参照ください。

  5. データプレーン上のサイドカーコンテナの標準出力ストリームのログを表示します。

    次の例は、kubectlを使用してアクセスログを表示する方法を示しています。

    1. 次のコマンドを実行して、サイドカープロキシのログを表示します。

      kubectlログhttpbin-5c5944c58c-w **** -c istio-proxy -- tail 1

      サンプル出力を表示する

      {
          "authority_for":"47.110.XX.XXX" 、
          "bytes_received":"0" 、
          "bytes_sent":"22382" 、
          "downstream_local_address":"192.168.0.29:80" 、
          "downstream_remote_address":"221.220.XXX.XXX:0" 、
          "duration":"80" 、
          "istio_policy_status":"-" 、
          "method":"GET" 、
          "path":"/static/favicon.ico" 、
          "protocol":"HTTP/1.1" 、
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d ****" 、
          "requested_server_name":"アウトバウンド_.8000_._.httpbin.de fault.svc.cluster.local" 、
          "response_code":"200" 、
          "response_flags":"-" 、
          "route_name":"default" 、
          "start_time":"2023-06-30T04:00:36.841Z" 、
          "trace_id":"-" 、
          "upstream_cluster":"インバウンド | 80 | |" 、
          "upstream_host":"192.168.0.29:80" 、
          "upstream_local_address":"127.0.X.X:55879" 、
          "upstream_response_time":"79" 、
          "upstream_service_time":"79" 、
          "upstream_transport_failure_reason":"-" 、
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML、Geckoのような) Chrome/113.0.X.X Safari/537.36" 、
          "x_forwarded_for":"221.220.XXX.XXX"
      } 
    2. 次のコマンドを実行して、ingressゲートウェイのログを表示します。

      kubectl -n istio-systemログistio-ingressgateway-6cff9b6b58-r **** -- tail 1

      サンプル出力を表示する

      {
          "authority_for":"47.110.XX.XXX" 、
          "bytes_received":"0" 、
          "bytes_sent":"22382" 、
          "downstream_local_address":"192.168.0.63:80" 、
          "downstream_remote_address":"221.220.XXX.XXX:64284" 、
          "duration":"81" 、
          "istio_policy_status":"-" 、
          "method":"GET" 、
          "path":"/static/favicon.ico" 、
          "protocol":"HTTP/1.1" 、
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d ****" 、
          "requested_server_name":"-" 、
          "response_code":"200" 、
          "response_flags":"-" 、
          "route_name":"httpbin" 、
          "start_time":"2023-06-30T04:00:36.841Z" 、
          "trace_id":"-" 、
          "upstream_cluster":"アウトバウンド | 8000 | | httpbin.de fault.svc.cluster.local" 、
          "upstream_host":"192.168.0.29:80" 、
          "upstream_local_address":"192.168.0.63:36140" 、
          "upstream_response_time":"81" 、
          "upstream_service_time":"81" 、
          "upstream_transport_failure_reason":"-" 、
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML、Geckoのような) Chrome/113.0.X.X Safari/537.36" 、
          "x_forwarded_for":"221.220.XXX.XXX"
      } 
  6. (オプション) Container Service for Kubernetes (ACK) コンソールでアクセスログを表示します。

    ACKクラスターを使用している場合は、ACKコンソールでアクセスログを表示することもできます。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターを検索し、その名前をクリックします。 左側のウィンドウで、[ワークロード] > [ポッド] を選択します。

    3. [ポッド] ページで、目的のポッドの名前をクリックし、[ログ] タブをクリックしてアクセスログを表示します。

ログの詳細については、「オブザーバビリティ設定の設定」および「バージョン1.17.2.35以降のASMインスタンスでのコントロールプレーンのログ収集とログベースのアラートの有効化」をご参照ください。

ステップ2: アクセスログのフィールドをカスタマイズする

1.17.2.35より前のバージョンのASMインスタンスの場合

  1. ASMコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[ASMインスタンス] > [ベース情報] を選択します。

  3. では、設定情報表示されるページのセクションをクリックします。アクセスログ形式の更新次のアクセスログを有効にしてコンテナーstdoutに印刷する.

  4. [アクセスログの形式の更新] ダイアログボックスで、accessLogFormatキーパラメーターをmy_custom_keyに、accessLogFormat値パラメーターを % REQ (エンドユーザー) % に設定して、フィールドを追加します。 次に、[OK] をクリックします。

    この例では、my_custom_keyを使用して、BookinfoサンプルアプリケーションのHTTPリクエストのエンドユーザーヘッダーフィールドの値を抽出し、その値をアクセスログに挿入します。 ASMが提供するオプションのフィールドを選択するか、カスタムフィールドを追加できます。 次の図は、オプションフィールドとサンプルカスタムフィールドを示しています。 その後、アクセスログがカスタム形式で印刷されます。可选字段

バージョン1.17.2.35以降のASMインスタンスの場合

  1. ASMコンソールにログインします。 左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASMインスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、[Observability Management Center] > [Observability Settings] を選択します。

  3. [Observability Settings] ページで、[Global][Namespace] 、または [Custom] タブをクリックします。

    • [名前空間] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択します。

    • [カスタム] タブを選択した場合、[作成] をクリックし、[名前空間] ドロップダウンリストから名前空間を選択し、[名前][マッチングラベル] を設定します。

  4. [ログ設定] セクションで、目的のフィールドを選択するか、カスタムフィールドの情報を変更します。 下部のログメトリックの右側にある增加.pngアイコンをクリックして、ログフィールドを追加することもできます。 次に、[送信] をクリックします。

    [ログ出力の有効化] をオンにした場合にのみ、アクセスログのフィールドをカスタマイズできます。 [ログ形式] セクションでは、デフォルトで選択されているログフィールドは必須であり、変更できません。 ログフィールドの値は、リクエストヘッダー、レスポンスヘッダー、またはEnvoy組み込み値から取得できます。

    次の例では、accessLogFormatキーaccept-encodingに、TypeRequest Propertiesに、accessLogFormat値Accept-Encodingに設定して、リクエストにaccept-encodingヘッダーを出力します。日志格式.png

  5. 次のコマンドを実行して、ASMインスタンスのデータプレーン上のコンポーネントのログを表示します。

    kubectlログhttpbin-5c5944c58c-w **** -c istio-proxy -- tail 1 | grep accept-encoding -- color=auto

    サンプル出力を表示する

    {
        "bytes_received":"0" 、
        "bytes_sent":"9593" 、
        "downstream_local_address":"192.168.0.29:80" 、
        "downstream_remote_address":"69.164.XXX.XX:0" 、
        "duration":"2" 、
        "istio_policy_status":"-" 、
        "method":"GET" 、
        "path":"/" 、
        "protocol":"HTTP/1.1" 、
        "request_id":"29939dc9-62be-4ddf-acf6-32cb098d ****" 、
        "requested_server_name":"アウトバウンド_.8000_._.httpbin.de fault.svc.cluster.local" 、
        "response_code":"200" 、
        "response_flags":"-" 、
        "route_name":"default" 、
        "start_time":"2023-06-30T04:18:19.734Z" 、
        "trace_id":"-" 、
        "upstream_cluster":"インバウンド | 80 | |" 、
        "upstream_host":"192.168.0.29:80" 、
        "upstream_local_address":"127.0.X.X:34723" 、
        "upstream_service_time":"2" 、
        "upstream_transport_failure_reason":"-" 、
        "user_agent":"Mozilla/5.0 zgrab/0.x" 、
        "x_forwarded_for":"69.164.XXX.XX" 、
        "authority_for":"47.110.XX.XXX" 、
        "upstream_response_time":"2" 、
        "accept-encoding":"gzip"
    } 

    サブステップ4で追加されたaccept-encodingヘッダーの値がアクセスログに出力されます。 ログの詳細については、「オブザーバビリティ設定の設定」および「バージョン1.17.2.35以降のASMインスタンスでのコントロールプレーンのログ収集とログベースのアラートの有効化」をご参照ください。

ステップ3: アクセスログの表示

アクセスログを有効にし、アクセスログのフィールドをカスタマイズすると、リクエストを開始したサイドカーコンテナーがアクセスログをカスタム形式で印刷します。

  1. 入力ingressゲートウェイのIPアドレス: productpageブラウザのアドレスバーで、Productpageアプリケーションにアクセスします。

  2. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  3. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

  4. の上部にデプロイメントページを選択します。デフォルトから名前空間ドロップダウンリストをクリックし、詳細で、アクションの列productpage-v1アプリケーションを使用します。

  5. アプリケーションの詳細ページで、ログタブを設定し、コンテナパラメーターをistio-proxy.

    ログ出力ボックスには, 次のログが表示されます。 ログには、jasonという名前のエンドユーザーを指定するフィールドが含まれます。 これは、カスタム設定が有効になることを示します。日志

期間フィールド

Service Meshでは、「上流」は要求の受信者を示し、「下流」は要求の開始者を示す。 例えば、サービスAがサービスBへの要求を開始するとき、サービスaは下流サービスであり、サービスBは上流サービスである。

項目

説明

期間

$DURATION %

  • HTTPリクエストの場合、このフィールドは、サイドカープロキシまたはゲートウェイがリクエストの読み取りを開始してから、サイドカープロキシまたはゲートウェイがレスポンスの最後のバイトをダウンストリームサービスに送信するまでの期間を示します。 これは、サイドカープロキシまたはゲートウェイがリクエストを処理するのにかかる時間を表します。

  • TCP要求の場合、このフィールドは、サイドカープロキシまたはゲートウェイがダウンストリームサービスに接続されている期間を示します。

request_duration

% REQUEST_DURATION %

  • HTTPリクエストの場合、このフィールドは、ダウンストリームサービスからリクエスト全体を読み取るのにかかる時間を示します。 リクエスト全体には、リクエストヘッダーとリクエスト本文が含まれます。 このフィールドの値が予想より大きい場合は、次の項目を確認します。

    • ネットワーク品質が良好で、帯域幅が十分かどうか

    • 上流または下流のサービスにI/Oボトルネックがあるかどうか

  • TCP要求の場合、このフィールドは使用できず、このフィールドの値はハイフン (-) です。

request_tx_duration

% REQUEST_TX_DURATION %

  • HTTPリクエストの場合、このフィールドは、リクエストが開始された時刻からリクエストの最後のバイトがアップストリームサービスに送信される時刻までのスパンを示します。 このフィールドの値が予想より大きい場合は、次の項目を確認します。

    • ネットワーク品質が良好で、帯域幅が十分かどうか

    • 上流または下流のサービスにI/Oボトルネックがあるかどうか

  • TCP要求の場合、このフィールドは使用できず、このフィールドの値はハイフン (-) です。

response_duration

% RESPONSE_DURATION %

  • HTTPリクエストの場合、このフィールドは、リクエストが開始された時刻から、レスポンスの最初のバイトがアップストリームサービスから読み取られる時刻までのスパンを示します。 このフィールドの値が予想よりも大きく、request_tx_durationの値が予想を満たしている場合は、上流サービスにパフォーマンスのボトルネックがあるかどうかを確認します。

  • TCP要求の場合、このフィールドは使用できず、このフィールドの値はハイフン (-) です。

response_tx_duration

% RESPONSE_TX_DURATION %

  • HTTP要求の場合、このフィールドは、応答の最初のバイトが上流サービスから読み取られた時間から、応答の最後のバイトが下流サービスに送信される時間までのスパンを示す。 このフィールドの値が予想より大きい場合は、次の項目を確認します。

    • ネットワーク品質が良好で、帯域幅が十分かどうか

    • 上流または下流のサービスにI/Oボトルネックがあるかどうか

  • TCP要求の場合、このフィールドは使用できず、このフィールドの値はハイフン (-) です。

upstream_service_time (サイドカープロキシの場合)

% RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%

サイドカープロキシまたはゲートウェイのアクセスログでは、このフィールドは上流サービスの処理時間と上流サービスとの通信で消費された時間を示します。 このフィールドの値が予想より大きい場合は、次の項目を確認します。

  • アップストリームアプリケーションの処理パフォーマンスが期待を満たすかどうか。

  • アップストリームサービスとの通信のネットワーク遅延と帯域幅が期待値を満たすかどうか。

upstream_response_time (ゲートウェイ用)

説明

Content-Lengthが0より大きいボディを持つHTTPリクエストの場合、リクエストは読み取り後に送信されるのではなく、同時に読み取られて上流のサービスに送信されます。 この場合、現在のノードがダウンストリームサービスから要求をゆっくりと読み取る場合、現在のノードのアップストリームサービスは、要求を読み取るのにより多くの時間を要する。

関連する API 操作

Simple Log Serviceを使用して、データプレーンのアクセスログを収集することもできます。 詳細については、「ASMゲートウェイのアクセスログの生成と収集の機能の設定」をご参照ください。