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

如何为Prometheus Micrometer标准指标添加application及instance标签?

问题描述

我有若干集成Actuator并暴露Prometheus指标的Spring Boot微服务,示例指标如下:

# HELP process_uptime_seconds The uptime of the Java virtual machine
# TYPE process_uptime_seconds gauge
process_uptime_seconds 3074.971

但这些指标缺少application标签,无法在Grafana仪表盘中关联至特定应用;同时部分微服务存在多实例,希望添加instance标签。请问能否对这些标准指标进行上述标签定制?

解决方案

完全可以给Spring Boot Actuator暴露的标准Prometheus指标添加application和instance标签,有两种常用实现方式:

方式一:通过配置直接全局添加

在每个微服务的配置文件中添加以下配置,就能给所有Actuator生成的指标统一加上指定标签:

YAML格式(application.yml)

management:
  metrics:
    tags:
      application: ${spring.application.name}
      instance: ${spring.cloud.client.ip-address}:${server.port}

Properties格式(application.properties)

management.metrics.tags.application=${spring.application.name}
management.metrics.tags.instance=${spring.cloud.client.ip-address}:${server.port}

配置生效后,重启服务访问/actuator/prometheus,就能看到像这样带标签的指标:

process_uptime_seconds{application="order-service",instance="192.168.2.3:8081",} 3074.971

方式二:自定义MeterFilter实现精细化控制

如果只需要给特定指标加标签,或者有更复杂的标签逻辑,可以自定义MeterFilter类:

import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.MeterFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CustomMetricTagConfig {

    @Value("${spring.application.name}")
    private String appName;

    @Value("${spring.cloud.client.ip-address}:${server.port}")
    private String instanceInfo;

    @Bean
    public MeterFilter addTargetTags() {
        return new MeterFilter() {
            @Override
            public Meter.Id map(Meter.Id id) {
                // 仅给process开头的指标添加标签
                if (id.getName().startsWith("process_")) {
                    return id.withTag("application", appName)
                            .withTag("instance", instanceInfo);
                }
                return id;
            }
        };
    }
}

注意事项

  • 如果没有引入Spring Cloud依赖,${spring.cloud.client.ip-address}可以替换为${server.address},或者直接设置固定的实例标识字符串。
  • 两种方式都不需要修改原有指标的生成逻辑,属于对现有指标的标签增强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:20:53