Spring引导公共指标未由JmxMetricWriter导出

时间:2016-05-10 11:17:07

标签: spring spring-boot export jmx metrics

我有一个不易放入计数器或计量器的指标(它只是我要公开的特定缓存的大小)。

所以我修改了一个现有的类来实现PublicMetrics:

@Component
public class MyMetric implements PublicMetrics 

然后公开指标:

@Override
public Collection<Metric<?>> metrics() {
    Collection<Metric<?>> metrics = new TreeSet<Metric<?>>();
    Metric<Integer> cacheSize = new Metric<Integer>("gauge.cacheSize",cacheSize);
    metrics.add(cacheSize);
    return metrics;
}

Spring Boot文档声明:

“要添加每次调用度量标准端点时计算的其他度量标准,只需注册其他PublicMetrics实现bean。默认情况下,端点将收集所有此类bean。”

因此,为了通过JMX公开这些额外的指标,我认为这会将它们与开箱即用的指标一起导出:

@Bean
@ExportMetricWriter
MetricWriter metricWriter(MBeanExporter exporter) {
    return new JmxMetricWriter(exporter);
}

但是当我查看JConsole或VisualVM中的mbeans时,我的指标没有出现。

在导出它们方面我做错了什么,是否有一种更简单的方式来暴露某些状态(我没有注入计数器或计量服务,因为我没有适当的方法来注入这些) ?

更新:

如果我调用org.springframework.boot.Endpoint.metricsEndpoint data()操作,我的仪表会正确返回正确的值,它只是JMX导出器没有将它作为mbean导出。

1 个答案:

答案 0 :(得分:2)

事实证明这是解决方案(见here

  

推送和拉取指标通过/ metrics端点自动公开。但开箱即用只有拉动指标通过MetricWriters自动导出。要导出拉取指标(例如PublicMetrics),您必须像这样定义MetricsEndpointMetricReader bean:

@Bean 
public MetricsEndpointMetricReader metricsEndpointMetricReader(MetricsEndpoint metricsEndpoint) { 
  return new MetricsEndpointMetricReader(metricsEndpoint); 
}