なぜ、時にはマイクロメータ測定戻っはNaNを読んだのですか?

セコ:

私は次のようにプログラム的にメーターを読みしようとしています:

レジストリを取得します。

MeterRegistry registry = Metrics.globalRegistry.getRegistries().iterator().next();

読むの測定:

    double systemCpuUsage = registry.get("system.cpu.usage").gauge().measure().iterator().next().getValue();

問題は、時々私は得ることですNaN

私は、ドキュメントにこれについて読ん:なぜ私のゲージがNaNを報告したり、消えていますか?

しかし、私は私がやるものかわからないんだけど。また、私は(によって公開されている春のブートアクチュエータの「ビルトイン」ゲージを読んでいるmanagement.metrics.enable.process.cpu.usage=true私はそれの建設を変更することはできませんので)。

Sumeet Mondal:

この場合は、使用しているので、メトリック「に建てられた」、あなたは無効にすることができio.micrometer.core.instrument.binder.MeterBinder#bindTo、再定義system.cpu.usageAAカスタムMeterBinder実装と、およびとして定義system.cpu.usageを(あなたが使用して他の人と一緒に)

Gauge.builder("system.cpu.usage", operatingSystemBean, x -> invoke(systemCpuUsage))
.strongReference(true)//Add strong reference
.tags(tags)
.description("The recent cpu usage for the whole system")
.register(registry);

参照してio.micrometer.core.instrument.binder.system.ProcessorMetrics今のようにそれを定義し、例えば。

ProcessorMetrics上のBeanがで定義されているorg.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration、あなたもどこかであなたのBeanを定義する必要があります。(又はマーク@Component)

あなたには、いくつかのカスタムリストのサイズをキャプチャするように、マイクロメータによっていくつかの定義済みのメトリックに依存したくない場合は、これはあなたが何ができるかです。

private static Map<String, Long> strongRefGauge = new ConcurrentHashMap<>();

値を追加するために次の操作を行います

registry.gauge("CustomListSizeGuage", getMyCustomGuageTagsFor("myListName"), strongRefGauge, g -> g.get("myListName")).put("myListName", list.size());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=232115&siteId=1