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

Alibaba Cloud Service Mesh:Wasmプラグインを使用してASMモニタリングメトリクスのディメンションを追加する

最終更新日:Jan 13, 2025

Service Mesh (ASM) には、アプリケーションの実行状況をリアルタイムで把握できるように、複数の組み込みモニタリングメトリクスと複数のディメンションが用意されています。強力な拡張メカニズムにより、ASMでは、リクエストまたはレスポンスのコンテンツに基づいて処理ロジックを指定し、処理結果をモニタリングメトリクスのディメンションに追加できます。このトピックでは、Wasmプラグインを使用して、ASMの既存のモニタリングメトリクスにカスタムディメンションを追加する方法について説明します。

背景情報

ASMは、istio_requests_totalやistio_request_duration_millisecondsなど、複数のモニタリングメトリクスを提供します。デフォルトでは、これらのメトリクスは、source_workload、destination_workload、response_codeなど、いくつかのディメンションで構成されています。これらのディメンションに基づいて、メッシュプロキシによって生成されるモニタリングメトリクスを構成できます。詳細については、「可観測性設定の構成」をご参照ください。このようにして、さまざまなダッシュボードとアラートルールを作成できます。

前提条件

手順 1:Wasmプラグインを作成し、HTTPBinアプリケーションに適用する

このセクションでは、RustでWasmプラグインを開発し、リクエストヘッダー内のuser-nameをBase64を使用してデコードし、user-nameをistio_requests_totalメトリクスにディメンションとして追加する方法について説明します。

他の言語のAPIは、RustプラグインのAPIと似ています。他の言語でWasmプラグインを作成する場合は、対応するSDKドキュメントを参照してください。
  1. プラグインのソースコード を取得します。

  2. Wasmプラグインをコンパイルしてデプロイします。詳細については、「ASMのEnvoyプロキシ用のRustでWasmプラグインを作成する」をご参照ください。

    このプラグインは、SetProperty 関数を呼び出して、解析結果をfilter_stateとして指定するように設計されています。WasmPlugin のサンプルYAMLファイルは次のとおりです。

    apiVersion: extensions.istio.io/v1alpha1
    kind: WasmPlugin
    metadata:
      name: add-metrics-log
      namespace: default
    spec:
      imagePullPolicy: IfNotPresent
      selector:
        matchLabels:
          app: httpbin
      url: oci://registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/asm-wasm-rust-add-metrics-tag:v1.22.6.7-g1926b20-aliyun
      phase: AUTHN
    この例のイメージはパブリックリポジトリに保存されています。したがって、wasm-secrets を構成する必要はありません。使用しているACRがプライベートリポジトリの場合は、「ASMのEnvoyプロキシ用のRustでWasmプラグインを作成する」のサンプルYAMLファイルに従って調整する必要があります。

手順 2:可観測性設定を変更してカスタムディメンションを追加する

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

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

  3. [モニタリングメトリクス構成] リストで、[REQUEST_COUNT][クライアント側メトリクス][サーバー側メトリクス] を有効にし、それぞれ値 filter_state["wasm.user-name"] を持つカスタムディメンション user_name を追加します。

    image

  4. [送信] をクリックして、filter_state をカスタムディメンションに追加します。

手順 3:HTTPBinサービスにアクセスする

  1. 次のコマンドを実行して、HTTPBinサービスにアクセスします。

    curl ${IP address of ASM gateway}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo="
    YXNtLXRlc3QtdXNlcgo= は、Base64でエンコードされたasm-test-userの結果です。 // Base64でエンコードされたasm-test-userの結果です。

    期待される出力:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`
  2. データプレーン上のASMクラスターのkubeconfigファイルを使用して、次のコマンドを実行し、HTTPBinポッドのPrometheusメトリクスを表示します。

    kubectl exec deploy/httpbin -it -c istio-proxy -- curl localhost:15000/stats/prometheus | grep istio_requests_total

    期待される出力:

    # TYPE istio_requests_total counter
    istio_requests_total{reporter="destination",source_workload="istio-ingressgateway",...,user_name="asm-test-user"} 3

    この場合、このディメンションに基づいて、Prometheusで特定のユーザーの統計情報を指定できます。