Добавление дополнительных показателей в Dropwizard

Как мне добавить добавление настраиваемых показателей в материал по умолчанию, который Dropwizard предоставляет на порт администратора (8081)? Я не могу найти ничего в документации, кроме добавления проверок работоспособности. Я бы очень хотел включить некоторые статистические данные, извлеченные из MongoDB, и скорее сохранил бы его с ресурсами администратора на 8081, чем создать страницу пользовательских показателей на порту 8080.

Ответ 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, а не к новому автономному приложению.