Prometheus是一款面向云原生应用程序的开源监控工具,本文介绍如何在ASM集成自建Prometheus实现网格监控。

前提条件

步骤一:配置网格数据指标

将以下内容更新到Prometheus配置中,然后重启Prometheus实例,确保配置生效。
scrape_configs:
# Mixer scrapping. Defaults to Prometheus and mixer on same namespace.
- job_name: 'istio-mesh'
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - istio-system
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: istio-telemetry;prometheus
# Scrape config for envoy stats
- job_name: 'envoy-stats'
  metrics_path: /stats/prometheus
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_container_port_name]
    action: keep
    regex: '.*-envoy-prom'
  - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
    action: replace
    regex: ([^:]+)(?::\d+)?;(\d+)
    replacement: $1:15090
    target_label: __address__
  - action: labeldrop
    regex: __meta_kubernetes_pod_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: namespace
  - source_labels: [__meta_kubernetes_pod_name]
    action: replace
    target_label: pod_name
- job_name: 'istio-policy'
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - istio-system
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: istio-policy;http-policy-monitoring
- job_name: 'istio-telemetry'
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - istio-system
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: istio-telemetry;http-monitoring
- job_name: 'pilot'
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - istio-system
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: istiod;http-monitoring
  - source_labels: [__meta_kubernetes_service_label_app]
    target_label: app
- job_name: 'sidecar-injector'
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - istio-system
  relabel_configs:
  - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
    action: keep
    regex: istio-sidecar-injector;http-monitoring

步骤二:创建EnvoyFilter

  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格管理详情页面单击右上角的功能设置
    说明 请确保ASM实例的Istio为v1.6.8.4及以上版本。
  5. 功能设置更新对话框中选中开启采集Prometheus监控指标,然后单击确定
    ASM将自动生成采集Prometheus监控指标相关的EnvoyFilter配置。

步骤三:产生监控数据

请求数据平面的服务,这里以Bookinfo为例,详细介绍请参见入门指引。进入Productpage页面,多次刷新页面,以产生监控数据。监控数据

结果验证

  • 验证Envoy是否采集监控指标数据。

    执行以下命令,返回监控指标数据,表示Envoy采集监控指标数据。若没有数据,则Envoy没有在采集监控指标数据。

    details=$(kubectl get pod -l app=details -o jsonpath={.items..metadata.name})
    kubectl exec $details -c istio-proxy -- curl -s localhost:15090/stats/prometheus |grep istio
  • 查看Prometheus网格监控指标数据。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择网络 > 服务
    5. 在服务页面找到Prometheus,单击Prometheus对应的外部端点。
    6. 在Prometheus页面输入istio_requests_total,单击Execute,显示以下页面所示结果。peomethus
  • 查看Grafana网格监控指标数据。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择网络 > 服务
    5. 在服务页面搜索找到Grafana,单击Grafana对应的外部端点。
    6. 在Grafana页面选择Istio Workload Dashboard,显示以下页面所示结果。3