Dropwizardが管理ポート(8081)で提供するデフォルトのものにカスタムメトリックを追加するにはどうすればよいですか?ヘルスチェックを追加する以外に、ドキュメントには何も見つかりません。MongoDBから取得したいくつかの統計情報を組み込みたいので、ポート8080でカスタムメトリックページを作成するよりも、8081の管理リソースに保持したいと思います。
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();
}
Dropwizardプロジェクトに含まれているメトリクスサーブレットにメトリクスを表示する場合は、サーブレットが使用したものと同じMetricRegistryオブジェクトを使用して、メトリクスを登録する必要があります。
アプリケーションの環境から正しいMetricRegistryインスタンスを取得できます。または、起動時にinitilaizeメソッドに渡されたBootstrapオブジェクトから。
Dropwizardのドキュメントには、MetricRegistryのスコープとそれに含まれるオブジェクトについての記載がありません。これは、独自のMetricRegistryを作成することを意味します。これは、スタンドアロンの「はじめに」アプリケーションでは問題なく機能しますが、このドキュメントは、新しいスタンドアロンアプリケーションではなく、既存のDropwizardアプリケーションにメトリックを追加することに関するものです。
私はそれをテストしていませんが、おそらくこれは役立つかもしれません:
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の場合、これを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