0

私は数日を費やしましたが、春の計装は初めてで、機能しませんでした。

私はスプリングブート2アプリを持っています。pom.xml私が定義した:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-statsd</artifactId>
  <version>1.1.5</version>
</dependency>

application.conf

management.metrics.export.statsd.host=localhost
management.metrics.export.statsd.port=8125
management.metrics.export.statsd.flavor=etsy
management.metrics.export.statsd.step=2m
management.metrics.export.statsd.enabled=true
management.endpoints.web.exposure.include=health,metrics

アプリの起動時に、新しいメトリック (カウンター) をエクスポートしたい:

@SpringBootApplication
public class MyApplication {

  private static final Logger LOG = LoggerFactory.getLogger(MyApplication.class);

  private static final StatsdConfig config = new StatsdConfig() {
    @Override
    public String get(String k) { return null; }
    @Override
    public StatsdFlavor flavor() { return StatsdFlavor.ETSY; }
  };

  private static final MeterRegistry registry = new StatsdMeterRegistry(config, Clock.SYSTEM);

  public static void main(String[] args) {
    // globalRegistry is composite hence was hoping they will unite into one
    Metrics.globalRegistry.add(registry);

    Counter myCounter = Counter
        .builder("myCounter")
        .description("indicates instance count of the object")
        .tags("dev", "performance")
        .register(registry);
//      .register(Metrics.globalRegistry);

    myCounter.increment(2.0);
    LOG.info("Counter: " + myCounter.count());
    SpringApplication.run(MyApplication.class, args);
  }

}

上記のようにコーディングすると、http://localhost:8081/actuator/metrics/myCounterでは利用できません。しかし.register(Metrics.globalRegistry);、前の行のコメントを外してコメントすると、http://localhost:8081/actuator/metrics/myCounter0.0にメトリックが含まれますが、その値は2.0.

私が望むのは、アプリケーション全体で定義されたカスタム メトリックを含むカスタム レジストリを作成し、正しく登録してメトリック エンドポイントで使用できるようにし、それを StatsD にエクスポートできるようにすることです。上記で何が欠けているか分かりますか?

これらのドキュメントhttps://www.baeldung.com/micrometerおよびhttps://micrometer.io/docs/registry/statsDに従いました。コードの Bean を作成する方法、または Spring Boot によって自動構成されたレジストリを使用する方法は?

4

1 に答える 1

0

Spring Boot の Micrometer 自動構成は、任意のMeterBinderBean を自動的に呼び出して、メーターを自動構成された にバインドしますMeterRegistry。クラスパスに必要な StatsD の依存関係 (既にある) を使用すると、これは StatsD ベースのレジストリになります。自分で設定するよりも、この自動設定を使用することをお勧めします。現状では、自動構成されたレジストリと独自のレジストリの両方があります。レジストリを Spring Bean として公開した場合、自動構成されたレジストリはバックオフし、作成されません。

StatsdConfigandを削除してStatsdMeterRegistry、代わりに自動構成を使用することをお勧めします。MeterBinderその後、 Bean を使用してカウンターをバインドできます。これにより、アプリケーションのメイン クラスは次のようになります。

@SpringBootApplication
public class MyApplication {

    @Bean
    public MeterBinder exampleMeterBinder() {
        return (meterRegistry) -> Counter.builder("myCounter")
            .description("indicates instance count of the object")
            .tags("dev", "performance")
            .register(meterRegistry);
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication, args);
    }

}
于 2019-06-26T16:11:29.513 に答える