Можно ли выставить метрики Dropwizard в логах - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь настроить схему ведения журнала в приложении, чтобы показать счетчик потоков в Dropwizard.Когда я захожу в порт администратора на 8081, я вижу метрики, которые Dropwizard предоставляет для приложения.Например, в разделе «Датчики» вы можете увидеть jvm.memory.total.used вместе со значением.Я хотел бы настроить журналы slf4j, чтобы показать это в некоторых моих запросах.Так, например, мои запросы GET могут выглядеть примерно так:

@GET
@TIME
@Produces(MediaType.Application_JSON)
public List<String> getNames {
    List<String> nameList = dao.getList();
    log.info("Memory used: {}", /*the value for jvm.memory.total.used*/)
    return nameList;
}

Однако я не смог найти много информации о показе метрик таким образом.Возможно ли это, и если да, то практично ли это делать?

ОБНОВЛЕНИЕ:

Мне удалось выставить метрики для состояний протектора в сервисе GET, так что теперь яэкспериментируя с попыткой получить результаты в отчете журнала.Вот мой код:

@Path("metrics")
@Produces(MediaType.APPLICATION_JSON)
public class GetStuff {
    private static final Logger log = LoggerFactory.getLogger(GetStuff.class);

    @GET
    @Path("/metrics")
    public MetricRegistry provideMetrics() {
        MetricRegistry metrics = new MetricRegistry();
        metrics.register("jvm.threads", new ThreadStatesGaugeSet());

        log.info("JVM Thread Count: {}", metrics.getGauges().get("jvm.threads.count"));
        return metrics;
    }
}

Я подтвердил, что это возвращает метрики, поэтому сейчас я пытаюсь заставить оператор log работать правильно и распечатать значение этого датчика.Теперь моя главная проблема заключается в том, что в журнале печатается адрес значения в отображении getGauges вместо значения, связанного с ключом.Более конкретно, я получаю значения, подобные этому:

JVM Thread Count: com.codahale.metrics.jvm.ThreadStatesGaugeSet$2@129e489

Кто-нибудь знает, как я могу это исправить, чтобы я мог получить фактическое значение?

РЕДАКТИРОВАТЬ: я открыл другойвопрос, связанный с этим, здесь .

1 Ответ

0 голосов
/ 04 октября 2018

Мне удалось заставить это работать.Большая часть процесса описана в моем редактировании вопроса, но вот окончательный код:

@Path("metrics")
@Produces(MediaType.APPLICATION_JSON)
public class GetStuff {
    private static final Logger log = LoggerFactory.getLogger(GetStuff.class);

    @GET
    @Path("/metrics")
    public MetricRegistry provideMetrics() {
        MetricRegistry metrics = new MetricRegistry();
        metrics.register("jvm.threads", new ThreadStatesGaugeSet());

        log.info("JVM Thread Count: {}", metrics.getGauges().get("jvm.threads.count").getValue);
        return metrics;
    }
}

Я забыл использовать getValue(), чтобы получить значение для оператора log, что хорошо исправляет мойвыдача адреса, печатаемого с карты getGauges вместо фактического значения.

...