Spring-Boot执行器在/metrics
公开了许多有用的指标,例如正常运行时间,内存使用情况,GC计数。
使用Dropwizard指标集成时,只有其中一部分会发送到Graphite。具体而言,只有计数器和仪表
有没有办法让这些其他指标发布到石墨?
documentation表明它应该是可能的:
Dropwizard'Metrics'库的用户会发现Spring Boot指标会自动发布到com.codahale.metrics.MetricRegistry
答案 0 :(得分:3)
Spring引导创建的系统度量标准不会自动报告,因为MetricsRegistry对这些度量标准一无所知。
您应该在应用程序启动时手动注册这些指标。
@Autowired
private SystemPublicMetrics systemPublicMetrics;
private void registerSystemMetrics(MetricRegistry metricRegistry) {
systemPublicMetrics.metrics().forEach(m -> {
Gauge<Long> metricGauge = () -> m.getValue().longValue();
metricRegistry.register(m.getName(), metricGauge);
});
}
我已定义Gauge
,并非所有系统指标都应添加为计量器。例如计数器应该用于捕获计数值。
如果您不想使用Spring启动。使用可以包括metrics-jvm
开箱即用以捕获JVM级别指标。
答案 1 :(得分:1)
这是一个解决方案,可以更新关于Spring指标变化的DropWizard指标。它也可以在不打开@EnableScheduling
的情况下执行此操作:
@EnableMetrics
@Configuration
public class ConsoleMetricsConfig extends MetricsConfigurerAdapter {
@Autowired
private SystemPublicMetrics systemPublicMetrics;
@Override
public void configureReporters(MetricRegistry metricRegistry) {
metricRegistry.register("jvm.memory", new MemoryUsageGaugeSet());
metricRegistry.register("jvm.thread-states", new ThreadStatesGaugeSet());
metricRegistry.register("jvm.garbage-collector", new GarbageCollectorMetricSet());
metricRegistry.register("spring.boot", (MetricSet) () -> {
final Map<String, Metric> gauges = new HashMap<String, Metric>();
for (final org.springframework.boot.actuate.metrics.Metric<?> springMetric :
systemPublicMetrics.metrics()) {
gauges.put(springMetric.getName(), (Gauge<Object>) () -> {
return systemPublicMetrics.metrics().stream()
.filter(m -> StringUtils.equals(m.getName(), springMetric.getName()))
.map(m -> m.getValue())
.findFirst()
.orElse(null);
});
}
return Collections.unmodifiableMap(gauges);
});
registerReporter(ConsoleReporter
.forRegistry(metricRegistry)
.convertRatesTo(TimeUnit.SECONDS)
.convertDurationsTo(TimeUnit.MILLISECONDS)
.build())
.start(intervalSecs, TimeUnit.SECONDS);
}
}
它使用com.ryantenney.metrics
库来启用其他Spring注释支持和DropWizard记者:
<dependency>
<groupId>com.ryantenney.metrics</groupId>
<artifactId>metrics-spring</artifactId>
<version>3.1.3</version>
</dependency>
但在这种特殊情况下实际上没有必要。