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

Alibaba Cloud Service Mesh:可観測性設定の構成

最終更新日:Jan 13, 2025

Service Mesh(ASM)では、ログ設定、メトリック設定、トレース分析設定などの可観測性設定を構成できます。 ASMコンソールでは、アクセスログの形式、メトリックのディメンション、特定のメトリックを有効にするかどうか、トレース分析のサンプリング率など、グローバル、名前空間レベル、またはワークロードレベルの構成をカスタマイズできます。 このトピックでは、可観測性設定を構成する方法について説明します。

前提条件

バージョン 1.17.2.35 以降の ASM インスタンスが作成されていること。 詳細については、「ASM インスタンスの作成」または「ASM インスタンスの更新」をご参照ください。

適用範囲

構成タイプ

説明

グローバル

グローバル構成には、ログ設定、メトリック設定、およびトレース分析設定が含まれます。 グローバル構成は必須であり、許可されるグローバル構成は 1 つだけです。 トレース分析設定は、[グローバル] タブでのみ使用できます。

名前空間レベル

名前空間固有の可観測性構成。 各名前空間には、名前空間レベルの可観測性構成が 1 つだけあります。

カスタム

ワークロードセレクターを使用して、カスタム構成の適用範囲を選択できます。 各ワークロードは、1 つのカスタム構成によってのみ選択できます。

手順

グローバル構成

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

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[可観測性管理センター] > [可観測性設定] を選択します。

  3. [可観測性設定] ページで、[グローバル] タブをクリックし、ビジネス要件に基づいてログ設定、メトリック設定、およびトレース分析設定を構成し、[送信] をクリックします。

    次の表のリンクをクリックして、詳細な構成の説明を表示できます。

    セクション

    説明

    ログ設定

    メトリック設定

    トレース分析設定

名前空間レベルの構成

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

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[可観測性管理センター] > [可観測性設定] を選択します。

  3. [可観測性設定] ページで、[名前空間] タブをクリックし、[作成] をクリックします。 表示されるページで、[名前空間] ドロップダウンリストから目的の名前空間を選択し、ビジネス要件に基づいてログ設定とメトリック設定を構成し、[作成] をクリックします。

    次の表のリンクをクリックして、詳細な構成の説明を表示できます。

    セクション

    説明

    ログ設定

    メトリック設定

カスタム構成

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

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。 左側のナビゲーションペインで、[可観測性管理センター] > [可観測性設定] を選択します。

  3. [可観測性設定] ページで、[カスタム] タブをクリックし、[名前空間] ドロップダウンリストから目的の名前空間を選択し、[作成] をクリックします。 表示されるページで、[名前][一致ラベル] を設定し、ビジネス要件に基づいてログ設定とメトリック設定を構成し、[作成] をクリックします。

    次の表のリンクをクリックして、詳細な構成の説明を表示できます。

    セクション

    説明

    ログ設定

    メトリック設定

ログ設定の説明

ログ設定セクションでは、アクセスログ出力の有効化または無効化、アクセスログの出力形式のカスタマイズ、アクセスログの形式のカスタマイズ、およびログのフィルタリングを行うことができます。

アクセスログ出力の有効化または無効化

  1. [ログ設定] セクションで、ビジネス要件に基づいて [ログ出力の有効化] スイッチをオンまたはオフにします。

    • スイッチをオンにすると、ASM インスタンスのデータプレーンにあるサイドカープロキシまたはゲートウェイは、アクセスログをコンテナに送信し、コンテナはログを stdout 出力ストリームに出力します。

    • スイッチをオフにすると、ASM インスタンスのデータプレーンにあるサイドカープロキシまたはゲートウェイは、アクセスログをコンテナへの送信を停止し、コンテナはログを stdout 出力ストリームに出力しなくなります。

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

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

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

      kubectl logs 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":"outbound_.8000_._.httpbin.default.svc.cluster.local",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"default",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"inbound|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, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
    2. 次のコマンドを実行して、イングレスゲートウェイのログを表示します。

      kubectl -n istio-system logs 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":"outbound|8000||httpbin.default.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, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
  3. (オプション)Container Service for Kubernetes(ACK)コンソールでアクセスログを表示します。

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

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

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

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

アクセスログの出力形式のカスタマイズ

説明

この機能は、v1.20.6.36 以降の ASM インスタンスでのみ使用できます。 ASM インスタンスの更新方法の詳細については、「ASM インスタンスの更新」をご参照ください。

[ログ設定] セクションで、ビジネス要件に基づいて [ログ出力形式] パラメータを [JSON] または [テキスト] に設定します。

  • パラメータを [JSON] に設定すると、アクセスログは対応するコンテナに JSON 文字列として出力されます。

  • パラメータを [テキスト] に設定すると、アクセスログは対応するコンテナにプレーンテキスト文字列として出力されます。

アクセスログの形式のカスタマイズ

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

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

    次の例では、[accesslogformat Key]accept-encoding に設定し、[タイプ][リクエストプロパティ] に設定し、[accesslogformat Value]Accept-Encoding に設定して、リクエストの accept-encoding ヘッダーを出力します。日志格式.png

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

    kubectl logs 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-32cb0998d****",
        "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
        "response_code":"200",
        "response_flags":"-",
        "route_name":"default",
        "start_time":"2023-06-30T04:18:19.734Z",
        "trace_id":"-",
        "upstream_cluster":"inbound|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"
    }

    手順 1 で追加された accept-encoding ヘッダーの値がアクセスログに出力されます。

ログのフィルタリング

[ログ設定] セクションの下部で、[ログフィルターの有効化] を選択し、ビジネス要件に基づいてテキストボックスにログフィルター式を入力します。 式と一致しないリクエストのアクセスログは出力されません。

たとえば、レスポンスの HTTP ステータスコード が 400 以上のリクエストのログを出力するには、式を response.code >= 400 に設定します。 詳細については、「CEL 式とよく使用される属性」をご参照ください。

CEL 式とよく使用される属性

ログフィルター式は、Common Expression Language(CEL)で記述されます。 次の表は、CEL 式でよく使用される属性について説明しています。 詳細については、「CEL」および「Envoy」をご参照ください。

属性

タイプ

説明

request.path

string

リクエストパス。

request.url_path

string

クエリ文字列を含まないリクエストパス。

request.host

string

URL のホスト名部分。

request.method

string

リクエストメソッド。

request.headers

map<string, string>

小文字のヘッダー名でインデックス化されたすべてのリクエストヘッダー。

request.useragent

string

ユーザーエージェントヘッダーの値。

request.time

timestamp

リクエストの最初のバイトが到着した時刻。

request.id

string

リクエスト ID。

request.protocol

string

リクエストプロトコル。 有効な値:HTTP/1.0HTTP/1.1HTTP/2HTTP/3

request.query

string

リクエスト URL のクエリ部分。

response.code

int

レスポンスの HTTP ステータスコード。

response.code_details

string

レスポンスコードの詳細。

response.grpc_status

int

レスポンスの Google Remote Procedure Call(gRPC)ステータスコード。

response.headers

map<string, string>

小文字のヘッダー名でインデックス化されたすべてのレスポンスヘッダー。

response.size

int

レスポンスボディのサイズ。 単位:バイト。

response.total_size

int

レスポンスの合計サイズ。 単位:バイト。

メトリック設定の説明

メトリック設定セクションでは、メトリックの有効化または無効化、およびメトリックディメンションの編集を行うことができます。

メトリックの有効化または無効化

メトリックは、クライアント側メトリックとサーバー側メトリックに分けられます。

  • クライアント側メトリックは、サイドカープロキシがクライアントとして機能し、リクエストを開始したときに生成されるメトリックです。 ゲートウェイメトリックもクライアント側メトリックに属します。

  • サーバー側メトリックは、サイドカープロキシがサーバーとして機能し、アクセスされたときに生成されるメトリックです。

  1. [メトリック設定] セクションで、[CLIENT 側インジケータ] または [SERVER 側インデックス] 列の対応するメトリックの [有効] チェックボックスをオンまたはオフにします。

    • メトリックが有効になっている場合、ASM インスタンスのデータプレーンにあるサイドカープロキシまたはゲートウェイは、ポート 15020 経由で /stats/prometheus パスにメトリックを公開します。

    • メトリックが無効になっている場合、ポート経由では公開されません。

  2. 次のコマンドを実行して、サイドカープロキシまたはゲートウェイによって公開されているメトリックを表示します。

    kubectl を使用してサイドカープロキシまたはゲートウェイのコンテナに接続し、curl コマンドを実行してポート 15020 経由で /stats/prometheus パスにアクセスし、エクスポートされたメトリックを表示できます。

    kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10

    サンプル出力:

    # TYPE istio_agent_cert_expiry_seconds gauge
    istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548
    # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod.  // ポッドに関連付けられていないエンドポイント。
    # TYPE istio_agent_endpoint_no_pod gauge
    istio_agent_endpoint_no_pod 0
    # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. // ガベージコレクションサイクルの一時停止期間の概要。
    # TYPE istio_agent_go_gc_duration_seconds summary
    istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05
    istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05
    ......

メトリックディメンションの編集

メトリックのディメンションは、より多くの情報を示します。 これらのディメンションを使用して、Prometheus でメトリックをフィルタリングできます。 たとえば、source_app ディメンションを使用して、リクエスト元のクライアントが特定のアプリケーションであるメトリックをフィルタリングできます。

  1. [メトリック設定] セクションで、[CLIENT 側インジケータ] または [SERVER 側インデックス] 列の [ディメンションの編集] をクリックします。

  2. [CLIENT ディメンション構成のカスタマイズ] ダイアログボックスで、メトリックのエクスポートに使用するディメンションをオンまたはオフにし、[送信] をクリックします。

    メトリックディメンションを追加することはできません。 不要なメトリックディメンションを削除して、Prometheus のストレージスペースを節約できます。 通常、ほとんどのディメンションは保持されます。 したがって、[メトリック設定] セクションには、削除されたディメンションのみが表示されます。

トレース分析設定の説明

トレース分析設定セクションでは、サンプリング率とカスタムタグを構成できます。 設定はグローバルに有効になります。

サンプリング率

サンプリング率は、トレース分析をトリガーするリクエストの割合を示します。 値を 0 に設定すると、トレース分析は無効になり、リクエストによってトレース分析はトリガーされません。

カスタムタグ

トレース分析のスパンによって伝達されるタグをカスタマイズできます。 [トレース分析設定] セクションで、[カスタムタグの追加] をクリックし、[名前][タイプ][値] を設定します。

次の表に、タイプの値とタグ構成の例を示します。

タイプ

説明

タグ構成例

固定値

このタイプのタグの値は、設定した値に固定されています。

  • [名前]: env

  • [タイプ]: 固定値

  • [値]: prod

リクエストヘッダー

このタイプのタグの値は、指定されたリクエストヘッダーの値です。 リクエストにヘッダーが存在しない場合は、デフォルト値がタグ値として使用されます。

構成例では、タグ値は User-Agent ヘッダーから取得されます。 ヘッダーが存在しない場合は、デフォルト値 unknow がタグ値として使用されます。

  • [名前]: useragent

  • [タイプ]: リクエストヘッダー

  • [値]:

    • [ヘッダー名]: User-Agent

    • [デフォルト値]: unknow

環境変数

このタイプのタグの値は、ワークロードの指定された環境変数から取得されます。 ワークロードに環境変数が存在しない場合は、デフォルト値がタグ値として使用されます。

構成例では、タグ値は ENV 環境変数から取得されます。 環境変数が存在しない場合は、デフォルト値 unknow がタグ値として使用されます。

  • [名前]: env

  • [タイプ]: 環境変数

  • [値]:

    • [環境変数名]: ENV

    • [デフォルト値]: unknow