我正在尝试为反应流添加过滤器:
metrics()
已成功向IoC注册:
public class FluxMetricsFilter implements MeterFilter {
private FluxMetricsConfigurationProperties fluxMetricsConfigurationProperties;
public FluxMetricsFilter(FluxMetricsConfigurationProperties fluxMetricsConfigurationProperties) {
this.fluxMetricsConfigurationProperties = fluxMetricsConfigurationProperties;
}
public DistributionStatisticConfig configure(Id id, DistributionStatisticConfig config) {
....
}
}
过滤器已在Prometheus注册表中注册,但是在使用metrics()
时达到指标时,它不使用Prometheus注册表,但在全局注册表中,Spring Boot不在全局级别注册过滤器:>
因此,当我进入getOrCreateMeter
方法时,我的过滤器列表为空:
我可以看到metrics()
的呼叫:
FluxMetrics(Flux<? extends T> flux) {
this(flux, null);
}
/**
* For testing purposes.
*
* @param registry the registry to use, or null for global one
*/
FluxMetrics(Flux<? extends T> flux, @Nullable MeterRegistry registry) {
super(flux);
this.name = resolveName(flux);
this.tags = resolveTags(flux, DEFAULT_TAGS_FLUX, this.name);
if (registry == null) {
this.registryCandidate = Metrics.globalRegistry;
}
else {
this.registryCandidate = registry;
}
}
那么指标注册表始终将是全球性的?因为我没有找到第二个构造函数的任何调用。所以我不能指定要使用的注册表?
我知道是否可以这样做:
Metrics.globalRegistry.config().meterFilter(
new MeterFilter() {
@Override
public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
...
}
});
它将起作用,但这不是Spring的方式。任何人都可以帮助使用IoC做到这一点吗?
答案 0 :(得分:0)
一切正常,我不好,我正在注册一个过滤器Spring方法,但是我写的过滤器应用程序条件是检查度量标准名称,诀窍是Spring Reactor度量标准都具有相同的名称"reactor_flow.."
,所以我在上面的字符串中搜索类似"myCustomName"
的东西。
要区分流量指标,您需要检查标签。
除此之外,Spring似乎为反应堆流量指标提供了百分位数(因为这正是我的自定义过滤器正在执行的操作),因此不再需要过滤器。
由于我们是WebFlux和Reactor的早期发布者,所以我不确定从一开始就对Reactor&WebFlux有百分位数的支持。