如何为Micrometer DistributionSummary记录动态标签值?
给DistributionSummary设置动态标签的实现方法
和Micrometer中Counter的动态标签用法一致,DistributionSummary同样支持在运行时传入标签值,主要有两种实现方式:
1. 使用Metrics静态工具类直接调用
和Metrics.counter的写法完全对应,直接在获取DistributionSummary实例时传入动态标签键值对,然后调用record()方法记录数值:
// 运行时传入动态标签值,获取对应实例并记录数据 Metrics.distributionSummary("my_histogram", "myTag", runtimeTagValue) .record(durationMs);
如果需要多个动态标签,直接追加键值对即可:
Metrics.distributionSummary("my_histogram", "tag1", val1, "tag2", val2) .record(measurementValue);
2. 通过MeterRegistry实例操作
如果你已经持有MeterRegistry的实例,也可以通过它来获取带动态标签的DistributionSummary:
方式一:直接调用distributionSummary方法
先注册基础的DistributionSummary(也可以不提前注册,Micrometer会自动创建符合配置的实例):
// 注册不带固定动态标签的基础DistributionSummary DistributionSummary.builder("my_histogram") .description("Example histogram") .baseUnit("ms") .publishPercentiles(0.5, 0.95) .serviceLevelObjectives(100.0, 500.0, 1000.0) .distributionStatisticExpiry(Duration.ofMinutes(5)) .distributionStatisticBufferLength(3) .register(meterRegistry);
运行时获取带动态标签的实例并记录:
meterRegistry.distributionSummary("my_histogram", "myTag", runtimeTagValue) .record(durationMs);
方式二:使用find+tagged定位实例
这种方式可以先检查实例是否存在,再进行记录:
meterRegistry.find("my_histogram") .tag("myTag", runtimeTagValue) .distributionSummary() .ifPresent(summary -> summary.record(durationMs));
核心原理
Micrometer会自动维护不同标签组合的Meter实例,你不需要手动为每个标签值创建单独的DistributionSummary,只要指定标签键和运行时的动态值,框架会自动处理实例的创建和复用。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

