Prometheus是一款面向云原生应用程序的开源监控工具。ASM支持集成自建Prometheus,您可以在Prometheus查看Dubbo服务的网格监控数据。本文介绍如何集成自建Prometheus查看Dubbo服务的网格监控数据,实现Dubbo服务可观测性。

前提条件

步骤一:在ASM开启采集Prometheus监控指标

  1. 在ACK集群中部署Prometheus。具体操作,请参见开源Prometheus监控
  2. 创建Prometheus的配置。
    1. 使用以下内容,创建名为servicemonitor的YAML文件。
      apiVersion: monitoring.coreos.com/v1
      kind: ServiceMonitor
      metadata:
        name: prometheus-oper-istio-dataplane
        labels:
          monitoring: istio-dataplane
          release: ack-prometheus-operator
      spec:
        selector:
          matchExpressions:
            - {key: istio-prometheus-ignore, operator: DoesNotExist}
        namespaceSelector:
          any: true
        jobLabel: envoy-stats
        endpoints:
        - path: /stats/prometheus
          targetPort: http-envoy-prom
          interval: 15s
          relabelings:
          - sourceLabels: [__meta_kubernetes_pod_container_port_name]
            action: keep
            regex: '.*-envoy-prom'
          - action: labelmap
            regex: "__meta_kubernetes_pod_label_(.+)"
          - sourceLabels: [__meta_kubernetes_namespace]
            action: replace
            targetLabel: namespace
          - sourceLabels: [__meta_kubernetes_pod_name]
            action: replace
            targetLabel: pod_name
    2. 执行以下命令,在monitoring命名空间创建ServiceMonitor。
      kubectl apply -f servicemonitor.yaml --namespace=monitoring
  3. 在ASM开启采集Prometheus监控指标功能。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格管理详情页面单击右上角的功能设置
      说明 请确保ASM实例的Istio为1.8.6及以上版本。
    5. 功能设置更新对话框中选中开启采集Prometheus监控指标,然后单击确定
      ASM将自动生成采集Prometheus监控指标相关的EnvoyFilter配置。
  4. 验证在ASM开启采集Prometheus监控指标功能是否成功。
    在浏览器中输入http://localhost:9090,单击Status/Targets,可以看到新增的采集源。采集源

步骤二:部署Dubbo服务

  1. 通过kubectl工具连接集群
  2. 执行以下命令,部署Dubbo服务。
    说明 关于Dubbo服务的YAML文件,请参见dubbo-nacos-example
    export NACOS_ADDRESS=xxxx #xxxx为MSE的Nacos地址,建议使用内网地址。
    curl -L https://raw.githubusercontent.com/AliyunContainerService/asm-labs/main/dubbo/dubbo-nacos-example/demo.yaml | sed -e "s/_NACOS_SERVER_CLUSTERIP_/$NACOS_ADDEESS/g" |kubectl apply -f - 
  3. 查看Ingress Gateway的IP地址。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 在网格详情页面左侧导航栏单击ASM网关,在ASM网关页面查看Ingress Gateway Kubernetes服务列下的IP地址。
  4. 重复执行以下命令,向Dubbo服务发送请求,产生流量。
    for i in {1..100}; do curl http://<Ingress Gateway地址>/com.alibaba.edas.DemoService0/sayHello; done

步骤三:查看监控数据

  1. 查看Prometheus网格监控指标数据。
    1. 访问Prometheus。具体操作,请参见开源Prometheus监控
    2. 在Prometheus页面输入envoy_dubbo_dubbo_incomming_stats_inbound_28880_request,单击Execute
      可以在Prometheus页面看到Dubbo服务的监控指标数据。监控数据
  2. 查看Grafana网格监控指标数据。
    1. 打开Grafana大盘。具体操作,请参见开源Prometheus监控
    2. 在左侧导航栏选择大盘 > Manage
    3. 在Manage页签下单击Import,导入Envoy大盘配置文件
      导入成功后,显示以下大盘信息。Envoy大盘

      该Envoy大盘主要包括Sidecar(Envoy)的CPU、内存系统指标,以及Dubbo业务请求的QPS、RT等相关指标,其中Dubbo Provider对应Inbound流量,Dubbo Consumer对应Outbound流量。

    4. 可选:若页面提示找不到ServiceMesh对应数据源,您可以在Grafana面板选择ServiceMesh数据源,然后单击Add data source
      页面提示