Service Mesh (ASM) には、アプリケーションのリアルタイムな実行状況をより深く理解するために役立つ、複数の組み込み監視メトリクスとディメンションが用意されています。ASM の強力な拡張メカニズムにより、リクエストや応答の内容に基づいて処理ロジックを指定し、その処理結果を監視メトリクスのディメンションに追加できます。このトピックでは、Wasm プラグインを使用して、ASM の既存の監視メトリクスにカスタムディメンションを追加する方法について説明します。
背景情報
ASM は、`istio_requests_total` や `istio_request_duration_milliseconds` など、複数の監視メトリクスを提供します。デフォルトでは、これらのメトリクスには `source_workload`、`destination_workload`、`response_code` などのディメンションが設定されています。これらのディメンションに基づいて、メッシュプロキシによって生成される監視メトリクスを設定できます。詳細については、「可観測性設定の構成」をご参照ください。これにより、さまざまなダッシュボードやアラートルールを作成できます。
前提条件
バージョン 1.18 以降の ASM インスタンスにクラスターを追加していること。
自動サイドカープロキシ注入が有効になっていること。詳細については、「サイドカーインジェクションポリシーの設定」をご参照ください。
HTTPBin アプリケーションがデプロイされ、アクセス可能であること。詳細については、「HTTPBin アプリケーションのデプロイ」をご参照ください。
ステップ 1:Wasm プラグインを作成し、HTTPBin アプリケーションに適用
このセクションでは、Rust で Wasm プラグインを開発し、リクエストヘッダー内の `user-name` を Base64 でデコードし、その `user-name` を `istio_requests_total` メトリックのディメンションとして追加する方法について説明します。
他の言語の API は Rust プラグインの API と似ています。他の言語で Wasm プラグインを作成する場合は、対応する SDK ドキュメントをご参照ください。
プラグインのソースコードを取得します。
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:可観測性設定を変更し、カスタムディメンションを追加
-
ASM コンソールにログインします。左側のナビゲーションウィンドウで、を選択します。
-
[メッシュ管理] ページで、対象の ASM インスタンス名をクリックします。左側のナビゲーションウィンドウで、を選択します。
-
Metric Settings タブで、[REQUEST_COUNT] の [クライアント側のメトリック] と [サーバー側のメトリック] を有効にします。次に、各メトリックに
user_nameという名前のカスタムディメンションを追加し、その値としてfilter_state["wasm.user-name"]を設定します。 -
Submit をクリックして、Wasm プラグインの
filter_stateをメトリックディメンションとして追加します。
ステップ 3:HTTPBin サービスへのアクセス
次のコマンドを実行して、HTTPBin サービスにアクセスします。
curl ${ASM ゲートウェイの IP アドレス}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo="YXNtLXRlc3QtdXNlcgo=は、`asm-test-user` を Base64 でエンコードした結果です。想定される出力:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`データプレーン上の ASM クラスターの kubeconfig ファイルを使用して次のコマンドを実行し、HTTPBin Pod の 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 で特定のユーザーの統計情報を指定できます。