You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3监控(Observation、Metrics)自定义标签与上下文访问问题

Spring Boot 3 观测(Observation)自定义标签配置实践与疑问

背景

Spring Boot 3的观测(Observation)能力涉及Spring框架、Micrometer及自动配置体系,逻辑较为复杂。以添加Prometheus依赖的@RestController应用为例,无需额外观测配置,即可自动采集到http.server.requests、http.client.requests、spring.data.repository.invocations、mongodb.driver.commands/pool、tasks.scheduled.execution等多类指标。

根据官方文档,通过重写默认约定可在运行时添加自定义标签——比如创建继承DefaultServerRequestObservationConvention的@Component类,但这种方式仅对http.server和http.client请求指标生效。对于mongodb.driver、定时任务等指标,其默认约定多通过new直接实例化(例如MongoObservationCommandListener、ScheduledMethodRunnable中的实现),甚至部分指标(如mongodb.driver.commands)初期找不到可重写的默认约定。

核心问题

  1. 如何为mongodb.driver、定时任务等非HTTP类指标添加自定义标签?
  2. 能否在业务代码中注入ObservationRegistry,直接访问对应观测上下文添加标签?在RestController方法中尝试时,获取到的是spring.security.http.secured.requests上下文而非http.server.requests。

已探索的部分指标配置方案

后续实践中,已找到部分指标的自定义标签配置方式:

  • spring.data.repository.invocations指标:继承DefaultRepositoryTagsProvider并将其注册为Spring Bean
  • mongodb.driver相关指标:分别继承DefaultMongoCommandTagsProvider、DefaultMongoConnectionPoolTagsProvider并注册为Spring Bean
  • tasks.scheduled.execution指标:实现GlobalObservationConvention<ScheduledTaskObservationContext>接口,再通过ObservationRegistryCustomizer手动将该约定注册到观测注册表中

新疑问

  1. 如何访问观测所包装的业务数据(例如Repository操作的实体对象)?目前找到的方式包括上下文映射、HttpServletRequest属性传递、父观测映射等,但不确定这类方式的稳定性。
  2. 不同指标的自定义方式差异较大,背后的设计原因是什么?

内容的提问来源于stack exchange,提问作者radio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:26:10