已有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"
來針對每個工作負載啟用此功能。本文以全域為例進行說明。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在配置資訊地區的合并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'