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

为何自定义Micrometer指标无法在Prometheus单次拉取周期内展示?

问题:Micrometer Timer指标在Prometheus查询中的异常问题

我开发了一个简单的Kotlin+Spring Boot Web应用,尝试监控操作耗时。以下是我的Micrometer Timer指标代码:

fun recordOrderCreateDuration(duration: Long) {
    Timer
        .builder("my.custom.metrics")
        .tag("application", "order-manager")
        .tag("document", "order")
        .register(meterRegistry)
        .record(duration, TimeUnit.MILLISECONDS)
}

已将Prometheus的拉取间隔配置为15秒:

scrape_configs:
  - job_name: 'order_monitoring'
    scrape_interval: 15s

我希望在单次拉取周期内可视化操作耗时,但使用查询increase(provisioning_document_duration_seconds_max[15s])时无结果;改用increase(provisioning_document_duration_seconds_max[1m])可获取指标,但会覆盖1分钟内的多次15秒拉取点,导致可视化数据包含1-4个拉取记录。请问我的查询存在什么问题?


解决方案

1. 指标名称完全不匹配

你定义的Timer指标名是my.custom.metrics,但查询用的是provisioning_document_duration_seconds_max,两者没有关联。Micrometer会自动将指标名中的.替换为_,并把时间单位转换为秒,所以正确的指标名应该是my_custom_metrics_seconds_max,还要带上你设置的标签application="order-manager"、document="order"。

2. increase()函数用错了对象

increase()是专门给单调递增的计数器(Counter)用的,而Timer生成的_max属于Gauge类型——Gauge记录的是某一时刻的瞬时值(比如当前拉取周期内的最大耗时),不是持续增长的数值,用increase()查询Gauge完全不符合逻辑,自然返回空结果。

3. 正确的查询方式

如果要可视化单次15秒拉取周期内的操作最大耗时,直接查询对应的Gauge指标即可:

my_custom_metrics_seconds_max{application="order-manager", document="order"}

Prometheus每15秒会拉取一次这个瞬时值,可视化时就能看到每个周期的独立数据点。

如果需要其他维度的耗时数据,Timer还生成了这些常用指标:

  • my_custom_metrics_seconds_avg:周期内平均耗时
  • my_custom_metrics_seconds_p95:周期内95分位耗时
  • my_custom_metrics_seconds_count:周期内操作次数

4. 代码优化:避免重复注册Timer

你现在的代码每次调用recordOrderCreateDuration都会重新创建并注册同一个Timer,这会导致指标重复注册,可能引发异常或数据混乱。应该把Timer的初始化放在全局逻辑中,比如:

// 类初始化时仅创建一次Timer
private val orderCreateTimer = Timer.builder("my.custom.metrics")
    .tag("application", "order-manager")
    .tag("document", "order")
    .register(meterRegistry)

fun recordOrderCreateDuration(duration: Long) {
    orderCreateTimer.record(duration, TimeUnit.MILLISECONDS)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:45:28