服務網格 ASM(Service Mesh)會為所有流入、流出及網格內部的服務流量生成指標,以便監控服務行為。這些指標包括總流量數、錯誤率和請求響應時間等信息。然而,長時間運行會生成大量的指標數據,顯著增加了Envoy和Prometheus的資源消耗。為此,ASM提供了定期清理監控指標的配置,支持定期清理Envoy中緩存的一段時間內未使用的指標,以減少Envoy內存消耗,并降低Prometheus拉取指標時的網絡負載。本文將介紹如何配置定期清理功能及其應用實例。
前提條件
已添加集群到ASM實例,且實例版本在1.18及以上。具體操作,請參見添加集群到ASM實例。
配置方式
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在可觀測配置頁面,單擊全局頁簽,在監控指標設置處輸入定期清理時間,然后單擊提交。
重要建議監控指標定期清理時間至少設為Prometheus指標抓取時間
scrape_interval
的兩倍,以確保在指標清理之前Prometheus能夠成功地抓取指標。
示例演示
部署示例應用
使用以下內容在數據面集群部署示例應用。具體操作,請參見通過編排模板創建Linux應用或使用YAML模板創建。
apiVersion: v1 kind: Service metadata: name: httpbin labels: app: httpbin service: httpbin spec: ports: - name: http port: 8000 targetPort: 80 selector: app: httpbin --- apiVersion: apps/v1 kind: Deployment metadata: name: httpbin spec: replicas: 1 selector: matchLabels: app: httpbin version: v1 template: metadata: labels: app: httpbin version: v1 spec: containers: - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/httpbin:0.1.0 imagePullPolicy: IfNotPresent name: httpbin ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: sleep labels: app: sleep service: sleep spec: ports: - port: 80 name: http selector: app: sleep --- apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: replicas: 1 selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: terminationGracePeriodSeconds: 0 containers: - name: sleep image: registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2 command: ["/bin/sleep", "infinity"] imagePullPolicy: IfNotPresent
執行以下命令,查看應用狀態,
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE httpbin-846bxxx694-xxxxx 2/2 Running 0 44s sleep-866xxx97f9-xxxxx 2/2 Running 0 44s
啟用指標并測試
登錄ASM控制臺,在左側導航欄,選擇 。
在網格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇 。
在可觀測配置頁面,單擊全局頁簽,在監控指標設置列表中,勾選SERVER側指標的REQUEST_COUNT指標的啟用。然后單擊提交。
執行以下命令,訪問httpbin應用。
kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl -s httpbin:8000/status/418 > /dev/null; done'
執行以下命令,查看httpbin應用的監控指標。
kubectl exec -it deploy/httpbin -c istio-proxy -- curl 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{
預期輸出:
istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...,request_protocol="http",response_code="418",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 20
配置監控指標定期清理
根據配置方式中的步驟,配置監控指標定期清理時間為10s。
指標清理會有幾秒的延遲,驗證過程中,您可以視情況適當調整清理時間。
配置完成后,執行以下命令,查看httpbin應用的監控指標。
kubectl exec -it deploy/httpbin -c istio-proxy -- sh -c ' for i in $(seq 1 2); do echo "# Current content of the istio_requests_total metric: "; curl -s 0.0.0.0:15020/stats/prometheus | grep istio_requests_total{; sleep 15; done'
預期輸出:
# Current content of the istio_requests_total metric: istio_requests_total{reporter="destination",source_workload="sleep",source_canonical_service="sleep",...connection_security_policy="mutual_tls"} 30 # Current content of the istio_requests_total metric:
以上測試命令共發送2次請求。在清理之前,每次請求都會返回一行指標內容輸出和一行自定義輸出;15s后指標數據已經被清理,每次請求的返回變為只有一行自定義輸出。