繁体   English   中英

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

[英]Is it possible to expose Dropwizard metrics in logs

我正在尝试在应用程序中设置日志记录方案,以显示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映射中打印地址而不是实际值的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM