Service Mesh (ASM)內建多個監控指標以及豐富的指標維度來協助您更好地瞭解應用的運行情況。同時,ASM提供了強大的擴充機制,您可以基於請求或響應資訊自行編寫處理邏輯,將處理後的結果添加到監控指標的維度中。本文介紹如何使用Wasm外掛程式為ASM中已有的監控指標新增自訂維度。
背景資訊
ASM內建的監控指標(例如:istio_requests_total、istio_request_duration_milliseconds等),都有預設的一些維度(例如:source_workload、destination_workload、response_code等)。基於這些維度,您可以配置網格代理產生的監控指標。具體操作,請參見監控指標設定說明。基於這些監控指標資訊,您可以構建豐富的儀錶盤以及一些警示規則。
前提條件
已添加叢集到ASM執行個體,且ASM執行個體版本為1.18及以上。
已啟用Sidecar注入。具體操作,請參見配置Sidecar注入策略。
已建立入口網關。
已部署httpbin應用,且可以正常訪問。具體操作,請參見部署httpbin應用。
步驟一:編寫外掛程式並將其應用至httpbin應用
本文將示範使用Rust開發Wasm外掛程式,將要求標頭中的user-name進行base64解碼,然後將user-name作為一個維度添加到istio_requests_total指標中。
其他語言和Rust外掛程式調用的API類似,如果您使用其他語言編寫Wasm外掛程式,請自行查閱對應的SDK文檔。
擷取外掛程式源碼。
編譯並部署外掛程式。具體操作,請參見使用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做相對應的調整。
步驟二:修改可觀測配置,輸出自訂維度
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在監控指標設定列表中開啟REQUEST_COUNT的CLIENT側指標和SERVER側指標,並分別添加自訂維度
user_name
,取值為filter_state["wasm.user-name"]
。單擊提交,即可將Wasm外掛程式設定的
filter_state
添加到指標維度中。
步驟三:發起訪問測試,並查看結果
執行以下命令,訪問測試服務。
curl ${ASM網關IP}:80/status/418 --header "user-name:YXNtLXRlc3QtdXNlcgo="
YXNtLXRlc3QtdXNlcgo=
是asm-test-user進行base64編碼後的結果。預期輸出:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`
使用資料面叢集的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中定製特定使用者的各種統計資訊。