是否可以在日志中公开 Dropwizard 指标



我正在尝试在应用程序中设置日志记录方案以显示 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

有谁知道我如何解决这个问题,以便我可以获得实际值?

编辑:我在这里打开了另一个与此相关的问题。

我设法让它工作。 大部分过程都记录在我对问题的编辑中,但这是最终代码:

@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 映射打印地址而不是实际值的问题。

最新更新