全部產品
Search
文件中心

Alibaba Cloud Service Mesh:使用Wasm外掛程式擴充ASM監控指標的維度資訊

更新時間:Oct 26, 2024

Service Mesh (ASM)內建多個監控指標以及豐富的指標維度來協助您更好地瞭解應用的運行情況。同時,ASM提供了強大的擴充機制,您可以基於請求或響應資訊自行編寫處理邏輯,將處理後的結果添加到監控指標的維度中。本文介紹如何使用Wasm外掛程式為ASM中已有的監控指標新增自訂維度。

背景資訊

ASM內建的監控指標(例如:istio_requests_total、istio_request_duration_milliseconds等),都有預設的一些維度(例如:source_workload、destination_workload、response_code等)。基於這些維度,您可以配置網格代理產生的監控指標。具體操作,請參見監控指標設定說明。基於這些監控指標資訊,您可以構建豐富的儀錶盤以及一些警示規則。

前提條件

步驟一:編寫外掛程式並將其應用至httpbin應用

本文將示範使用Rust開發Wasm外掛程式,將要求標頭中的user-name進行base64解碼,然後將user-name作為一個維度添加到istio_requests_total指標中。

其他語言和Rust外掛程式調用的API類似,如果您使用其他語言編寫Wasm外掛程式,請自行查閱對應的SDK文檔。
  1. 擷取外掛程式源碼

  2. 編譯並部署外掛程式。具體操作,請參見使用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為私人倉庫,請根據使用Rust為網格代理開發Wasm外掛程式中的樣本YAML做相對應的調整。

步驟二:修改可觀測配置,輸出自訂維度

  1. 登入ASM控制台,在左側導覽列,選擇服務網格 > 網格管理

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇可觀測管理中心 > 可觀測配置

  3. 監控指標設定列表中開啟REQUEST_COUNTCLIENT側指標SERVER側指標,並分別添加自訂維度user_name,取值為filter_state["wasm.user-name"]

    image

  4. 單擊提交,即可將Wasm外掛程式設定的filter_state添加到指標維度中。

步驟三:發起訪問測試,並查看結果

  1. 執行以下命令,訪問測試服務。

    curl ${ASM網關IP}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo="
    YXNtLXRlc3QtdXNlcgo=是asm-test-user進行base64編碼後的結果。

    預期輸出:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/
            `"""`
  2. 使用資料面叢集的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中定製特定使用者的各種統計資訊。