Как мне добавить добавление настраиваемых показателей в материал по умолчанию, который Dropwizard предоставляет на порт администратора (8081)? Я не могу найти ничего в документации, кроме добавления проверок работоспособности. Я бы очень хотел включить некоторые статистические данные, извлеченные из MongoDB, и скорее сохранил бы его с ресурсами администратора на 8081, чем создать страницу пользовательских показателей на порту 8080.
Добавление дополнительных показателей в Dropwizard
Ответ 1
Dropwizard, используя библиотеку Metrics для всех своих показателей. Metric начало раздела содержит все необходимое, чтобы начать добавлять свои собственные.
Ответ 2
Вот пример. Каждая метрика в этом экземпляре 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();
}
Ответ 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
вы также можете вызвать 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
Ответ 4
Если вы хотите, чтобы ваши показатели отображались с сервлетом показателей, включенным в ваш проект Dropwizard, вы должны использовать тот же объект MetricRegistry, что и сервлет, и регистрировать в нем свои показатели.
Вы можете получить правильный экземпляр MetricRegistry из среды в вашем приложении; или из объекта Bootstrap, который был передан его методу initilaize во время запуска.
В документации Dropwizard не упоминается область действия MetricRegistry и объектов, которые она содержит. Это означает, что вы просто создаете свой собственный MetricRegistry. Это будет отлично работать для самостоятельного приложения "начало работы", но документ посвящен добавлению показателей к существующему приложению Dropwizard, а не к новому автономному приложению.