合并Istio与应用的监控指标

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