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