如何将自定义指标添加到 Dropwizard 在管理端口 (8081) 上提供的默认内容?除了添加健康检查之外,我在文档中找不到任何内容。我很想合并从 MongoDB 检索到的一些统计信息,并且宁愿将其与 8081 上的管理资源一起保存,也不愿在端口 8080 上创建自定义指标页面。
问问题
15326 次
4 回答
4
这是一个例子。该 jvm 实例中的每个指标都通过 JMX 公开。您还可以注册指标报告器,它们会将所有指标转储到日志间隔,或发送到石墨。
//this creates or returns the metrics, basically every metric is only created once and registered in a registry
private final Timer timerCanMakeHold =
Metrics.newTimer(MyClass.class, "METRICNAME", TimeUnit.MILLISECONDS, TimeUnit.SECONDS);
final TimerContext timerContex = timerCanMakeHold.time();
try{
doSomeWork()//this is what you are timing
}finally{
timerContex.stop();
}
于 2013-04-17T21:08:32.763 回答
4
如果您希望您的指标与 Dropwizard 项目中包含的指标 servlet 一起显示,您必须使用与 servlet 相同的 MetricRegistry 对象并将您的指标注册到其中。
您可以从应用程序中的 Environment 获取正确的 MetricRegistry 实例;或从在启动期间传递给其 initilaize 方法的 Bootstrap 对象。
Dropwizard 文档没有提到 MetricRegistry 的范围和它包含的对象。这意味着您只需创建自己的 MetricRegistry。这适用于独立的“入门”应用程序,但该文档是关于将指标添加到现有的 Dropwizard 应用程序,而不是新的独立应用程序。
于 2016-07-18T23:33:25.227 回答
3
我还没有测试过,但也许这会有所帮助:
final Graphite graphite = new Graphite(new InetSocketAddress("graphite.url.example", 2003));
MetricRegistry metrics = new MetricRegistry();
GraphiteReporter reporter = GraphiteReporter.forRegistry(metrics)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build(graphite);
reporter.start(1, TimeUnit.SECONDS);
Counter counter = metrics.counter("nameOfCounter");
counter.inc();
对于常春藤,您必须将其添加到您的 ivy.xml:
<dependency org="io.dropwizard" name="dropwizard-metrics" rev="0.7.1"/>
<dependency org="io.dropwizard" name="dropwizard-metrics-graphite" rev="0.7.1"/>
如果你把它放到你的 config.yml 中,
metrics:
reporters:
- type: console
timeZone: UTC
output: stdout
durationUnit: milliseconds
rateUnit: seconds
frequency: 120 seconds
- type: graphite
host: localhost
port: 9090
prefix: test.prefix
您还可以在 run 方法中调用 MetricsFactory:
MetricRegistry metrics = new MetricRegistry();
MetricsFactory mfac = configuration.getMetricsFactory();
mfac.configure(environment.lifecycle(), metrics);
Counter counter = metrics.counter("nameOfCounter");
counter.inc();
counter.inc();
counter.inc();
counter.inc();
counter.inc();
如果您构建自己的套接字侦听器,那么您可以每 xxx 秒看到此行传入:
test.prefix.nameOfCounter.count 5 1411562372
于 2014-09-18T07:53:02.070 回答