我正在尝试在我的Dropwizard应用程序中添加JMX指标,但是当我尝试在本地进行补充时,它会给我错误。我在initalize方法的Application类中添加了以下内容:
guiceBundle.addModule(new MetricsInstrumentationModule(bootstrap.getMetricRegistry()))
bootstrap.addBundle(new JmxMetricsBundle());
在guice模块文件中,我添加了provider:
@Provides
@Singleton
MetricRegistry providesMetricRegistry(Environment environment) {
return environment.metrics();
}
在pom.xml中添加了以下依赖项
<dependency>
<groupId>com.palominolabs.metrics</groupId>
<artifactId>metrics-guice</artifactId>
<version>3.1.3</version>
</dependency>
在我的课堂上,我正在使用它:
private Timer getTimer(String name) {
return metricRegistry
.timer(MetricRegistry.name(DocumentService.class, name));
}
public void method(){
final Timer.Context context = getTimer("methodMetric").time();
try{
//do something
}finally {
context.stop();
}
}
但是当我提供服务时,它会抛出以下错误:
DEBUG [2017-06-02 09:01:58,059] com.codahale.metrics.JmxReporter:
Unable to register timer! javax.management.InstanceAlreadyExistsException:
metrics:name=io.dropwizard.jetty.MutableServletContextHandler.connect-requests
DEBUG [2017-06-02 09:01:58,066] com.codahale.metrics.JmxReporter:
Unable to register gauge! javax.management.InstanceAlreadyExistsException:
metrics:name=io.dropwizard.jetty.MutableServletContextHandler.percent-
4xx-1m
类似的错误消息,虽然我的应用程序正在成功启动。我不知道为什么会出现这个错误,是否存在一些localhost设置问题,这个问题不会在生产中发生或者是我遗漏的一些真正的问题。请帮忙。
编辑: JmxMetricsBundle类:
public class JmxMetricsBundle implements Bundle {
public void initialize(Bootstrap<?> bootstrap) {
JmxReporter reporter = JmxReporter.forRegistry(bootstrap.getMetricRegistry()).build();
reporter.start();
}
@Override
public void run(Environment environment) {
}
}