已有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'