全部產品
Search
文件中心

Alibaba Cloud Service Mesh:配置ASM監控指標定期清理

更新時間:Oct 31, 2024

Service Mesh (ASM)會為所有流入、流出及網格內部的服務流量產生指標,以便監控服務行為。這些指標包括總流量數、錯誤率和請求回應時間等資訊。然而,長時間運行會產生大量的指標資料,顯著增加了Envoy和Prometheus的資源消耗。為此,ASM提供了定期清理監控指標的配置,支援定期清理Envoy中緩衝的一段時間內未使用的指標,以減少Envoy記憶體消耗,並降低Prometheus拉取指標時的網路負載。本文將介紹如何配置定期清理功能及其應用執行個體。

前提條件

配置方式

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

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

  3. 可觀測配置頁面,單擊全域頁簽,在監控指標設定處輸入定期清理時間,然後單擊提交

    image

    重要

    建議監控指標定期清理時間至少設為Prometheus指標抓取時間scrape_interval的兩倍,以確保在指標清理之前Prometheus能夠成功地抓取指標。

樣本示範

部署樣本應用

  1. 使用以下內容在資料面叢集部署樣本應用。具體操作,請參見通過編排模板建立Linux應用使用YAML模板建立

    展開查看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
  2. 執行以下命令,查看應用狀態,

    kubectl get pod

    預期輸出:

    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-846bxxx694-xxxxx   2/2     Running   0          44s
    sleep-866xxx97f9-xxxxx     2/2     Running   0          44s

啟用指標並測試

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

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

  3. 可觀測配置頁面,單擊全域頁簽,在監控指標設定列表中,勾選SERVER側指標REQUEST_COUNT指標的啟用。然後單擊提交

    image

  4. 執行以下命令,訪問httpbin應用。

     kubectl exec -it deploy/sleep -- sh -c 'for i in $(seq 1 10); do curl -s httpbin:8000/status/418 > /dev/null; done'
  5. 執行以下命令,查看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

配置監控指標定期清理

  1. 根據配置方式中的步驟,配置監控指標定期清理時間為10s。

    指標清理會有幾秒的延遲,驗證過程中,您可以視情況適當調整清理時間。
  2. 配置完成後,執行以下命令,查看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後指標資料已經被清理,每次請求的返回變為只有一行自訂輸出。