全部產品
Search
文件中心

Alibaba Cloud Service Mesh:合并Istio與應用的監控指標

更新時間:Jun 30, 2024

已有Prometheus監控端點的應用服務,通過啟用合并Istio與應用的監控指標功能,可以藉助網格代理輸出原有業務指標。本文介紹如何合并Istio與應用的監控指標。

前提條件

已建立ASM執行個體,且版本為1.17.2.30及以上。具體操作,請參見建立ASM執行個體升級ASM執行個體

重要

本功能不適合應用程式指標資料較為敏感的情境。應用程式指標資料將與Istio指標混合採集,只要具備Istio指標查看許可權的人員就可以同時查看應用程式指標資料。

功能介紹

啟用合并Istio與應用的監控指標功能後,服務網格會將應用程式指標合并到Istio指標中,相對應的prometheus.io註解會被加入到所有資料面Pod上,以啟用Prometheus的指標抓取能力。如果這些註解已經存在,就會被覆蓋。網格代理將應用指標和Istio指標進行合并,Prometheus可以從:15020/stats/prometheus端點拉取合并後的指標。

啟用該功能後,服務網格將對Pod進行以下操作:

  • 網格化之前使用prometheus.io註解標註的抓取方法,會被儲存到網格代理的環境變數之中。

  • 將被網格劫持的應用服務輸出的Prometheus指標和網格代理自身指標進行合并,輸出到:15020/stats/prometheus端點,供Prometheus拉取。

步驟一:部署樣本應用

部署一個包含prometheus.io註解的樣本應用。具體操作,請參見在ASM執行個體關聯的叢集中部署應用

productpage應用對應的部署檔案樣本如下。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: productpage-v1
  labels:
    app: productpage
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: productpage
      version: v1
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9080"
        prometheus.io/path: "/metrics"
      labels:
        app: productpage
        version: v1
    spec:
      ......

部署後,對應產生的Pod內容如下。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.aliyun.com/pod-ips: 172.17.0.132
    kubectl.kubernetes.io/default-container: productpage
    kubectl.kubernetes.io/default-logs-container: productpage
    kubernetes.io/psp: ack.privileged
    prometheus.io/path: /metrics
    prometheus.io/port: '9080'
    prometheus.io/scrape: 'true'

由上述YAML可以看到,prometheus.io註解如下。

prometheus.io/path: /metrics
prometheus.io/port: '9080'
prometheus.io/scrape: 'true'

步驟二:啟用合并Istio與應用的監控指標功能

ASM在網格層級預設禁用此功能,您可以全域設定該配置項,或者通過在Pod上添加註釋prometheus.istio.io/merge-metrics: "true"來針對每個工作負載啟用此功能。本文以全域為例進行說明。

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

  2. 網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇網格執行個體 > 基本資料

  3. 配置資訊地區的合并Istio與應用的監控指標右側,單擊啟用,然後在啟用合并Istio與應用的監控指標對話方塊,單擊確定

說明

若您不再需要此功能,可以按需選擇以下操作進行關閉。

  • 全域:在配置資訊地區的合并Istio與應用的監控指標右側,單擊禁用,然後在禁用合并Istio與應用的監控指標對話方塊,單擊確定

  • 工作負載:在Pod上添加註釋prometheus.istio.io/merge-metrics: "false"來針對每個工作負載禁用此功能。

步驟三:查看啟用效果

啟用合并Istio與應用的監控指標功能之後,重新滾動拉起新Pod之後,查看Pod的內容。

Pod YAML樣本如下。

apiVersion: v1
kind: Pod
metadata:
  annotations:
    k8s.aliyun.com/pod-ips: 172.17.0.126
    kubectl.kubernetes.io/default-container: productpage
    kubectl.kubernetes.io/default-logs-container: productpage
    kubernetes.io/psp: ack.privileged
    prometheus.io/path: /stats/prometheus
    prometheus.io/port: '15020'
    prometheus.io/scrape: 'true'
    ......
spec:
  containers:
    - args:
        - proxy
        - sidecar
        ......
      env:
        ......
        - name: ISTIO_PROMETHEUS_ANNOTATIONS
          value: '{"scrape":"true","path":"/metrics","port":"9080"}'
                

由上述YAML可以看到,prometheus.io註解已更新為如下內容。同時,新增了一個名稱為ISTIO_PROMETHEUS_ANNOTATIONS的環境變數,其值為原有的prometheus.io註解內容。

prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'