9

エンドポイントで表示されるすべてのメトリックを にエクスポートしようとしてい/metricsますStatsdMetricWriter

これまでのところ、次の構成クラスがあります。

package com.tonyghita.metricsdriven.service.config;

import com.codahale.metrics.MetricRegistry;
import com.ryantenney.metrics.spring.config.annotation.EnableMetrics;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.ExportMetricReader;
import org.springframework.boot.actuate.autoconfigure.ExportMetricWriter;
import org.springframework.boot.actuate.metrics.reader.MetricReader;
import org.springframework.boot.actuate.metrics.reader.MetricRegistryMetricReader;
import org.springframework.boot.actuate.metrics.statsd.StatsdMetricWriter;
import org.springframework.boot.actuate.metrics.writer.MetricWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@EnableMetrics(proxyTargetClass = true)
public class MetricsConfig {
    private static final Logger LOGGER = LoggerFactory.getLogger(MetricsConfig.class);

    @Value("${statsd.host:localhost}")
    private String host = "localhost";

    @Value("${statsd.port:8125}")
    private int port;

    @Autowired
    private MetricRegistry metricRegistry;

    @Bean
    @ExportMetricReader
    public MetricReader metricReader() {
        return new MetricRegistryMetricReader(metricRegistry);
    }

    @Bean
    @ExportMetricWriter
    public MetricWriter metricWriter() {
        LOGGER.info("Configuring StatsdMetricWriter to export to {}:{}", host, port);
        return new StatsdMetricWriter(host, port);
    }
}

/metricsこれは、Statsd に追加したすべてのメトリックを書き込みますが、エンドポイントに表示されるシステム/JVM メトリックも送信したいと考えています。

私は何が欠けていますか?

4

4 に答える 4

5

spring-boot コードで見たものから、への呼び出しCounterServiceGaugeService実装のみが dropwizard に転送されますMetricRegistry

したがって、すでに観察したように、エンドポイントからのcounter.*およびgauge.*メトリックのみが になります。/metricsStatsd

システムおよび JVM メトリックはSystemPublicMetrics、カウンターまたはゲージ サービスを使用しないカスタム クラスを介して公開されます。

より簡単な解決策があるかどうかはわかりませんが (Spring チームの誰かがコメントするかもしれません)、それを行う 1 つの方法 (Spring Boot 固有ではない) は、定期的にシステム統計を に書き込むスケジュールされたタスクを使用することMetricRegistryです。

于 2015-08-26T20:43:33.477 に答える
5

JVM メトリクスを登録するには、codehale.metrics.jvm ライブラリによって提供される JVM 関連の MetricSet を使用できます。ゲージかカウンターかを指定せずに、セット全体を追加できます。

これは、jvm 関連のメトリックを登録しているサンプル コードです。

@Configuration
@EnableMetrics(proxyTargetClass = true)
public class MetricsConfig {

@Autowired
private StatsdProperties statsdProperties;

@Autowired
private MetricsEndpoint metricsEndpoint;

@Autowired
private DataSourcePublicMetrics dataSourcePublicMetrics;

@Bean
@ExportMetricReader
public MetricReader metricReader() {
    return new MetricRegistryMetricReader(metricRegistry());
}

public MetricRegistry metricRegistry() {
    final MetricRegistry metricRegistry = new MetricRegistry();

    //jvm metrics
    metricRegistry.register("jvm.gc",new GarbageCollectorMetricSet());
    metricRegistry.register("jvm.mem",new MemoryUsageGaugeSet());
    metricRegistry.register("jvm.thread-states",new ThreadStatesGaugeSet());

    return metricRegistry;
}

@Bean
@ConditionalOnProperty(prefix = "metrics.writer.statsd", name = {"host", "port"})
@ExportMetricWriter
public MetricWriter statsdMetricWriter() {
    return new StatsdMetricWriter(
            statsdProperties.getPrefix(),
            statsdProperties.getHost(),
            statsdProperties.getPort()
    );
}

}

注: スプリング ブート バージョン 1.3.0.M4 を使用しています。

于 2015-08-28T06:09:51.640 に答える