服务健康监控
引用文件
目录
简介
本文件面向 yudao-cloud 的服务健康监控体系,围绕“心跳检测、状态上报、异常告警”和“Prometheus 监控集成(指标采集、数据暴露、可视化)”两大主题,系统梳理访问日志过滤器在请求跟踪、性能统计与安全审计中的作用,并提供监控配置说明、指标定义、告警规则与性能基线建议,以及监控数据分析与故障诊断流程。
项目结构
- 监控相关能力分布于多个模块:
- 网关层:提供全局访问日志过滤器,记录请求/响应关键信息,便于性能与安全审计。
- Web 层:提供 API 访问日志过滤器,统一记录接口调用、参数脱敏、结果与耗时,支撑运营分析与审计。
- 链路追踪层:提供 Trace 过滤器与工具类,输出 trace-id 并贯穿请求链路,便于跨服务关联定位。
- 监控指标层:通过 Micrometer 自动装配,统一打点与标签,结合 Actuator 暴露端点。
- 健康与告警:通过 Spring Boot Admin 与 Prometheus 控制器对接,实现服务发现与告警接收。
- 配置层:集中于公共配置文件,开放 Actuator 端点、启用 Admin 与指标标签等。
图表来源
- AccessLogFilter.java
- ApiAccessLogFilter.java
- TraceFilter.java
- TracerUtils.java
- YudaoMetricsAutoConfiguration.java
- PrometheusController.java
- AdminServerConfiguration.java
- ActuatorEnvironmentPostProcessor.java
- application-common.yaml
章节来源
核心组件
- 访问日志过滤器(网关):在网关层对请求/响应进行记录,支持 JSON/Form 请求体读取与响应体合并输出,便于性能与安全审计。
- 访问日志过滤器(Web):在业务服务层统一记录接口调用详情,含用户、请求参数、响应体、耗时、操作模块/类型等,支持敏感字段脱敏。
- 链路追踪过滤器与工具:在响应头输出 trace-id,便于跨服务串联日志与指标,定位问题。
- 指标与标签:通过 Micrometer 自动装配,统一添加 commonTags,便于多维度聚合分析。
- Prometheus 集成:提供服务发现接口与告警接收端点,配合注册中心动态发现服务实例。
- Spring Boot Admin:启用 Admin Server,集中展示各服务实例健康状态与指标概览。
- Actuator 健康检查:通过配置开放所有端点,便于外部系统(如 Prometheus)抓取指标与健康状态。
章节来源
- AccessLogFilter.java
- ApiAccessLogFilter.java
- TraceFilter.java
- TracerUtils.java
- YudaoMetricsAutoConfiguration.java
- PrometheusController.java
- AdminServerConfiguration.java
- application-common.yaml
架构总览
下图展示了监控体系的关键交互:网关与业务服务分别产生访问日志;链路追踪为跨服务串联提供 trace-id;Micrometer 暴露指标;Prometheus 通过服务发现抓取;Spring Boot Admin 聚合健康状态;Actuator 暴露健康与指标端点。
图表来源
- AccessLogFilter.java
- ApiAccessLogFilter.java
- TraceFilter.java
- TracerUtils.java
- YudaoMetricsAutoConfiguration.java
- PrometheusController.java
- AdminServerConfiguration.java
组件详解
访问日志过滤器(网关)
- 功能要点
- 记录请求方法、URL、查询参数、请求头、用户 IP、开始时间。
- 对 JSON/Form 请求体进行读取并记录;对响应体进行合并输出,支持 JSON 美化展示。
- 计算耗时并统一输出到日志,便于性能分析与安全审计。
- 性能与安全
- 仅对特定媒体类型(JSON/FORM)读取请求体,避免对大体积/非结构化请求造成额外开销。
- 通过日志输出而非数据库落盘,降低对下游存储的压力(可按需扩展为异步落库)。
图表来源
章节来源
访问日志过滤器(Web)
- 功能要点
- 统一记录接口调用详情:用户、请求参数、响应体、耗时、结果码/消息、操作模块/类型。
- 支持敏感字段脱敏(如 password、token 等),并对响应体 data 字段进行脱敏保护。
- 通过注解控制是否记录与记录范围(请求/响应),默认对后台管理接口 严格记录。
- 审计与分析
- 结合 trace-id 与登录用户信息,支持跨服务审计与问题复盘。
- 提供导出能力,便于离线分析与合规审计。
图表来源
章节来源
链路追踪过滤器与工具
- 功能要点
- 在响应头输出 trace-id,便于客户端与下游服务串联日志。
- 提供工具类获取 trace-id,贯穿日志与指标采集。
- 对生产环境机顶盒 API 特例进行过滤,避免不必要的处理。
- 价值
- 跨服务定位问题、关联访问日志与指标,提升排障效率。
图表来源
章节来源
指标与标签(Micrometer)
- 功能要点
- 自动装配 MeterRegistry,统一添加 commonTags(如 application),便于多维度聚合。
- 通过配置开关控制是否启用指标(yudao.metrics.enable)。
- 价值
- 为 Prometheus 等监控系统提供标准化指标,便于统一展示与告警。
章节来源
Prometheus 集成
- 服务发现
- 提供 /actuator/prometheus/sd 接口,从注册中心获取服务列表,组装 targets 与 labels(如 __meta_prometheus_job)。
- 告警接收
- 提供 /actuator/prometheus/alerts 接口接收告警消息,便于统一处理与联动。
- 与 Actuator 的关系
- Actuator 端点全面开放,便于外部系统抓取健康与指标。
图表来源
章节来源
Spring Boot Admin
- 功能要点
- 启用 Admin Server,集中展示服务实例健康状态与指标概览。
- 与 Actuator 配合,统一暴露健康与指标端点。
- 价值
- 提供可视化的服务治理界面,便于运维人员快速掌握整体健康状况。
章节来源
Actuator 健康检查配置
- 功能要点
- 开放所有 Actuator 端点(include: '*'),便于外部系统抓取健康与指标。
- Elasticsearch 健康检查可按需关闭(通过 EnvironmentPostProcessor 注入属性)。
- 价值
- 为 Prometheus、Spring Boot Admin 等提供统一的数据源。
章节来源
依赖关系分析
- 组件耦合
- 访问日志过滤器(网关/Web)与链路追踪工具存在协作关系:Web 层日志记录会使用 trace-id,便于跨服务串联。
- 指标配置与 Actuator 配置共同决定监控数据的暴露方式与范围。
- Prometheus 控制器依赖注册中心,实现动态服务发现。
- 外部依赖
- Micrometer:指标打点与标签。
- Spring Boot Admin:健康与指标可视化。
- 注册中心:服务发现。
图表来源
- AccessLogFilter.java
- ApiAccessLogFilter.java
- TracerUtils.java
- YudaoMetricsAutoConfiguration.java
- PrometheusController.java
- AdminServerConfiguration.java
章节来源
性能考量
- 访问日志
- 网关层仅对 JSON/FORM 类型请求体进行读取,避免对非结构化或大体积请求造成额外开销。
- 响应体合并输出采用缓冲区合并策略,减少多次 I/O。
- 日志记录
- Web 层采用异步写入日志接口,避免阻塞主请求链路。
- 敏感字段脱敏在 JSON 层进行,尽量减少异常开销。
- 指标与标签
- commonTags 统一打点,便于聚合分析,同时避免重复标签导致的指标膨胀。
- Actuator
- 开放所有端点便于抓取,但需关注安全边界与访问控制,避免未授权访问。
[本节为通用指导,不直接分析具体文件]
故障排查指南
- 无法获取 trace-id
- 检查 TraceFilter 是否生效,确认响应头是否包含 trace-id。
- 确认 TracerUtils 是否能正确获取 trace-id。
- 访问日志缺失
- 网关层:确认请求媒体类型是否为 JSON/FORM,否则不会读取请求体。
- Web 层:确认接口是否标注 @ApiAccessLog 或满足后台管理接口记录条件。
- 确认敏感字段脱敏是否移除了关键字段。
- 指标未暴露
- 检查 Actuator 端点是否开放(include: '*')。
- 检查 yudao.metrics.enable 配置是否启用。
- Prometheus 无法抓取
- 检查 /actuator/prometheus/sd 返回的服务发现结果是否正确。
- 检查注册中心是否正常,实例是否注册成功。
- Spring Boot Admin 无健康信息
- 检查 Actuator 端点是否开放,Admin Server 是否启用。
- 检查服务实例注册信息与健康状态。
章节来源
- TraceFilter.java
- TracerUtils.java
- AccessLogFilter.java
- ApiAccessLogFilter.java
- application-common.yaml
- PrometheusController.java
- AdminServerConfiguration.java
结论
yudao-cloud 的监控体系通过“网关访问日志 + 业务访问日志 + 链路追踪 + 指标标签 + Prometheus 集成 + Spring Boot Admin”的组合,实现了从请求可观测性到服务健康态的全链路覆盖。建议在生产环境中:
- 明确日志保留周期与清理策略;
- 基于 trace-id 建立跨服务问题定位流程;
- 结合 Prometheus 与 Grafana 建立关键指标看板;
- 制定告警阈值与升级流程,确保异常及时处置。
[本节为总结性内容,不直接分析具体文件]
附录
监控配置清单
- Actuator 端点开放
- base-path: /actuator
- exposure.include: '*'
- Spring Boot Admin
- admin.context-path: /admin
- 实例优先使用 IP 注册
- 指标标签
- commonTags: application=
${spring.application.name}
- commonTags: application=
- Prometheus 集成
- 服务发现接口: /actuator/prometheus/sd
- 告警接收接口: /actuator/prometheus/alerts
- Elasticsearch 健康检查
- 可通过 EnvironmentPostProcessor 关闭健康检查
章节来源
- application-common.yaml
- YudaoMetricsAutoConfiguration.java
- PrometheusController.java
- ActuatorEnvironmentPostProcessor.java
监控指标与告警建议
- 指标建议
- QPS、P95/P99 响应时间、错误率、线程池/连接池使用率、GC 次数与耗时。
- 告警规则建议
- 错误率超过阈值、P99 响应时间超过阈值、实例不可用、关键依赖超时。
- 性能基线
- 基于历史峰值与 SLA 设定阈值,结合业务高峰时段调整。
[本节为通用指导,不直接分析具体文件]