Mesh 对接 Prometheus 解决方案
Mesh 的各项监控指标支持对接到 Prometheus 等开源组件,您在使用 Mesh 产品时,可以通过自运维监控方案捕获监控指标。
方案概述
MOSN 及 DSRConsole、DRM、OpenAPI、Pilot、Citadel、ACVIP、intelliproxy、OSP 等控制面组件均遵照 Prometheus 的规范格式暴露监控指标(包括自身运行状况的指标),例如 JVM、CPU、内存、协程等信息,以及与自身组件功能相关的自定义指标。
您在使用 Prometheus 时,可以采用单独部署 Prometheus 及 Grafana 的形式,然后在 Prometheus 的配置文件里配置各个组件的 Job。只要 Job 中的 relabel 能够与各个要监控的组件的 annotation、label 等匹配上,就能正确将监控指标收集上来。您也可以采用 Operator 的方式部署,监控指标的获取是利用 PodMonitor 或 ServiceMonitor 形式,之后配置 Grafana 大盘对监控指标进行展示。

方案实现
Prometheus 改造点
Mesh 能很好地支持 Prometheus,无需改造。
Mesh 改造点
Mesh 各个控制面组件已经暴露了如下监控指标:
控制面监控指标
控制面组件
metrics 指标 - 资源监控
metrics 指标 - 应用监控
Pilot
process_resident_memory_bytes
process_virtual_memory_bytes
go_memstats_alloc_bytes
go_memstats_heap_inuse_bytes
go_memstats_stack_inuse_bytes
process_cpu_seconds_totalgo_goroutines
pilot_xds_new:Sidecar 连接数
pilot_total_xds_internal_errors:XDS 错误总数
pilot_xds_write_timeout:XDS 写入超时
pilot_xds_push_timeout:XDS 推送超时
pilot_xds_push_errors_new:推送到 Sidecar 的错误数
支持的类型如下:
{type="push_abort"} {type="retry"} {type="unrecoverable"}
pilot_xds_pushes_new:XDS 推送总数
支持的类型如下:
{type="cds"} {type="cds_senderr"} {type="eds"} {type="eds_senderr"} {type="lds"} {type="lds_senderr"} {type="rds"} {type="rds_senderr"}
Citadel
process_resident_memory_bytes
process_virtual_memory_bytes
go_memstats_alloc_bytes
go_memstats_heap_inuse_bytes
go_memstats_stack_inuse_bytes
process_cpu_seconds_totalgo_goroutines
citadel_server_authentication_failure_count:认证失败的次数
citadel_server_csr_count:CSR 请求的次数
citadel_server_success_cert_issuance_count:正确签证书的次数
operator、operator-VM
process_resident_memory_bytes
process_virtual_memory_bytes
go_memstats_alloc_bytes
go_memstats_heap_inuse_bytes
go_memstats_stack_inuse_bytes
process_cpu_seconds_totalgo_goroutines
operator:
Sidecar 注入请求数
Sidecar 注入成功数
Sidecar 注入失败数
Sidecar 注入失败原因
operator-vm:
虚拟机 Sidecar 注入请求数
虚拟机 Sidecar 注入成功数
虚拟机 Sidecar 注入失败数
虚拟机 Sidecar 注入失败原因
agent 注册数
当前持有 agent 节点个数
DSRConsole
CPU
内存
JVM 线程数量
GC 数量统计
HTTP 请求总数
HTTP 请求成功数
HTTP 请求失败数
RPC 调用数
RPC 调用成功数
RPC 调用失败数
服务治理规则下发数
服务治理规则下发成功数
服务治理规则下发失败数
DRM
CPU
内存
JVM 线程数量
GC 数量统计
DRM 推送指标
drm_push{dataId=,target_ip=,instance_id=,status=}
DRM 客户端连接数
下发配置时间
OpenAPI
CPU
内存
JVM 线程数量
GC 数量统计
HTTP 请求总数
HTTP 请求成功数
HTTP 请求失败数
服务治理规则下发数
服务治理规则下发成功数
服务治理规则下发失败数
与 k8s 连接状况
OpenAPI 调用次数
OSP
CPU
内存
JVM 线程数量
GC 数量统计
HTTP 请求总数
HTTP 请求成功数
HTTP 请求失败数
RPC 调用数
RPC 调用成功数
RPC 调用失败数
服务治理规则下发数
服务治理规则下发成功数
服务治理规则下发失败数
intelliproxy
CPU
内存
JVM 线程数量
GC 数量统计
请求总量(支持按域名筛选)
http_server_requests_seconds_count
请求成功量
http_server_requests_seconds_count - tomcat_global_error_total
请求失败量
tomcat_global_error_total
请求平均耗时
http_server_requests_seconds_sum / http_server_requests_seconds_count
ACVIP
CPU
内存
JVM 线程数量
GC 数量统计
每个节点的健康状态
acvip_nodes_health{host_ip=}
每个节点负责的域名个数
acvip_nodes_domains{host_ip=}
每个域名的 IP 总数(已经开启的)
acvip_domain_config_ips{domain=}
健康的 IP 总数
acvip_domain_healthy_ips{domain=}
不健康的 IP 总数
acvip_domain_unhealthy_ips{domain=}
数据面监控指标
监控指标
说明
MOSN 应用接入数
展示接入的 MOSN 应用数量。
MOSN 服务器数量
展示 MOSN 的服务器数量。
错误码分类
展示所有的错误码分类。
不同应用错误码分类
根据不同应用展示错误码分类。
应用 MOSN 系统指标
展示 MOSN 系统指标,例如 CPU、内存、TCP 连接数、UDP 连接数等。
CPU Util 使用率
展示 MOSN 的 CPU 使用率。
应用 MOSN MEM_UTIL TOP 实例
展示 MOSN 的内存使用排名。
应用 MOSN_RT TOP 实例
展示 MOSN 的响应时间排名。
MOSN GoRoutine Top
展示 MOSN 进程的 GoRoutine 数量排名。
MOSN thread Top
展示 MOSN 进程的 thread 数量排名。
使用步骤
在 Prometheus 中修改配置文件。
Prometheus 使用 PodMonitor 形式进行监控,各个组件需要适应各自的 PodMonitor YAML。在 Prometheus 的配置文件里也需要配置 PodMonitorselector 来发现 PodMonitor。示例如下:
#DsrConsole:Prometheus 端口为 8080 apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: dsrconsole labels: team: frontend namespace: monitoring spec: namespaceSelector: any: true podMetricsEndpoints: - port: metrics #请根据行内实际情况修改 path: /actuator/prometheus selector: matchLabels: app: dsrconsole
在 Grafana 中配置数据源。
登录 Grafana 控制台。
在左侧导航栏,选择
> Data Sources,然后单击 Add Data Sources。
选择数据源为 Prometheus,然后按照实际环境配置数据源。
配置示例如下:
单击 Save & Test。
效果展示
数据面监控大盘
服务治理监控大盘
Pilot 监控大盘
Citadel 监控大盘
OpenAPI 监控大盘
sidecar-operator 监控大盘
intelliproxy 监控大盘