我使用Spring靴2.1.2。释放,我尝试将测微计与CompositeMeterRegistry结合使用。我的目标是将一些选定的米发布到ElasticSearch。下面的代码显示了我的示例配置。问题是,过滤器被完全忽略(因此所有指标都被发送到ElasticSearch),尽管我可以在日志中看到它已被处理(“过滤器对仪表的回复…”行)。
奇怪的是,如果我将MeterFilter定义为Spring bean,那么它将应用于所有注册表(但是,我希望它仅应用于“elasticMeter注册表”)。
这是一个示例配置类:
@Configuration
public class AppConfiguration {
@Bean
public ElasticConfig elasticConfig() {
return new ElasticConfig() {
@Override
@Nullable
public String get(final String k) {
return null;
}
};
}
@Bean
public MeterRegistry meterRegistry(final ElasticConfig elasticConfig) {
final CompositeMeterRegistry registry = new CompositeMeterRegistry();
registry.add(new SimpleMeterRegistry());
registry.add(new JmxMeterRegistry(new JmxConfig() {
@Override
public Duration step() {
return Duration.ofSeconds(10);
}
@Override
@Nullable
public String get(String k) {
return null;
}
}, Clock.SYSTEM));
final ElasticMeterRegistry elasticMeterRegistry = new ElasticMeterRegistry(elasticConfig, Clock.SYSTEM);
elasticMeterRegistry.config().meterFilter(new MeterFilter() {
@Override
public MeterFilterReply accept(Meter.Id id) {
final MeterFilterReply reply =
id.getName().startsWith("logback")
? MeterFilterReply.NEUTRAL
: MeterFilterReply.DENY;
log.info("filter reply of meter {}: {}", id.getName(), reply);
return reply;
}
});
registry.add(elasticMeterRegistry);
return registry;
}
}
因此,我希望ElasticSearch只接收“logback”指标,JMX接收所有指标。
更新时间:
我使用了过滤器并找到了“解决方案”,但我真的不明白上面的代码为什么不起作用。
这项工作:
elasticMeterRegistry.config().meterFilter(new MeterFilter() {
@Override
public MeterFilterReply accept(Meter.Id id) {
final MeterFilterReply reply =
id.getName().startsWith("logback")
? MeterFilterReply.ACCEPT
: MeterFilterReply.DENY;
log.info("filter reply of meter {}: {}", id.getName(), reply);
return reply;
}
});
不同之处在于:我返回ACCEPT而不是NEUTRAL。
奇怪的是,以下代码不起作用(ES获取所有指标):
elasticMeterRegistry.config().meterFilter(
MeterFilter.accept(id -> id.getName().startsWith("logback")));
但这是可行的:
elasticMeterRegistry.config().meterFilter(
MeterFilter.accept(id -> id.getName().startsWith("logback")));
elasticMeterRegistry.config().meterFilter(
MeterFilter.deny());
结论:
因此,过滤器似乎应该返回ACCEPT而不是NEUTRAL。但是对于不以“logback”开头的米,我的原始过滤器(使用NEUTRAL)返回DENY。那为什么这些指标会发布到ElasticSearch注册表?
有人能解释一下吗?
这实际上是一系列问题的组合。我只想指出几点。
对于您定义的计量注册bean,Spring Boot将自动配置弹性计量注册bean,因为没有弹性计量注册bean。不要自己创建一个CompositeMeterRegistry bean,只需定义一个自定义的ElasticMeterRegistry bean,该bean将应用所需的MeterFilter,并让Spring Boot为您创建一个(CompositeMeterRegistry
bean)。
对于MeterFilterReply
,ACCEPT
将立即接受仪表,DENY
将立即拒绝仪表,NEUTRAL
将决定推迟到下一个过滤器。基本上米将被接受,除非有任何DENY
。
有没有办法通过微米使用Servlet过滤器(即非Spring应用程序)收集HTTP指标。我正在寻找一个类似于io.micrometer.jersey2.server.MetricsApplicationEventListener的解决方案,在泽西的情况下……但是我正在寻找HTTP级别的东西,而不是依赖于REST……
我对Spring很陌生,正在尝试将我的应用程序连接到麋鹿。该应用程序运行的是Spring boot 1.5.5,因此我使用的是微米遗产。我的pom看起来像这样: 每当我尝试启动我的应用程序时,我都会收到以下错误: 根本原因似乎是类io.micrometer.core.instrument.config.validate.Validated它似乎没有像它应该的那样出现在包中。对此有什么想法吗?
我正试图将普罗米修斯的度量标准迁移到千分尺,但现在我只能做一件事。。。 目前,我有一个普罗米修斯直方图配置如下: 因此,为了切换到测微计,我将其替换为: 好啊让我们看看我想如何使用它。。。此刻我只是打电话 所以我把这个换成了 但现在的问题是,测微计抱怨我之前配置的度量没有这些标签。我当然知道,因为我不知道当时的值。以下是例外情况: 好啊所以我想,然后让我们用呼叫。但这不起作用,因为没有传递这些值的
我很难让Spring Camel获得注册为Bean的HeaderFilterStrategy类,这样就可以通过Camel路线找到它。我试图注释HeaderFilterStrategy自定义类似乎是徒劳的。。。那么如何注册这个东西,以便在运行时找到它呢? 我有一个驼峰应用程序,其中一条路线使用定制的HeaderFilterStrategy 策略类看起来像: 我注册它与骆驼使用一个简单的注册表: 我在
我正在利用dogstatsd方法,使用千分尺将指标发送给datadog。我获得了正常的指标,如计数器和计量器,但我无法生成事件。有办法生成datadog事件吗?
假设我有一个应用程序,其中REST API更新产品的价格。 我想使用微米计来公开新价格作为指标。我无法理解微米计留档应该如何完成。 唯一对我有效的DoubleFunction是在我的ProductService中创建一个新方法来返回它的价格。这似乎是我想公开作为指标的每一条数据的开销。 我这里缺少什么?为什么不足以更新Gauge?