3 回答

TA貢獻1816條經(jīng)驗 獲得超4個贊
這是由于千分尺在儀表中使用了“弱參考”。由于儀表沒有對該對象的強引用,因此當(dāng)對象被垃圾回收時,該值變?yōu)?code>NaN.
如果您確實控制了儀表的創(chuàng)建,您會希望自己存儲一個參考,或者調(diào)用strongReference(true)
儀表。
如果您遇到內(nèi)置的 Spring Boot 儀表,我相信您遇到了錯誤。這很奇怪,因為ProcessorMetrics
創(chuàng)建該儀表的儀表綁定器擁有自己的引用(盡管它可以為空)。
當(dāng)您看到NaN
?

TA貢獻1811條經(jīng)驗 獲得超4個贊
在這種情況下,由于您使用的是“內(nèi)置”指標,因此您可以重寫 io.micrometer.core.instrument.binder.MeterBinder#bindTo,system.cpu.usage使用自定義 MeterBinder 實現(xiàn)重新定義,并將 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)
如果您不想依賴一些預(yù)定義的千分尺指標,比如捕獲一些自定義列表大小,這就是您可以做的。
private static Map<String, Long> strongRefGauge = new ConcurrentHashMap<>();
要添加值,請執(zhí)行以下操作
registry.gauge("CustomListSizeGuage", getMyCustomGuageTagsFor("myListName"), strongRefGauge, g -> g.get("myListName")).put("myListName", list.size());

TA貢獻2080條經(jīng)驗 獲得超4個贊
只想提一下可能導(dǎo)致千分尺報告 NaN 的另一個原因。它實際上是一種默認行為,當(dāng)值函數(shù)本身拋出異常時: https://github.com/micrometer-metrics/micrometer/blob/1.8.x/micrometer-core/src/main/java/io/micrometer /核心/儀器/內(nèi)部/DefaultGauge.java#L57
此異常直接在儀表本身中捕獲,并且可能會記錄在 WARN 或可能只是 DEBUG lvl 中,不確定,由于某種原因在我們的應(yīng)用程序中無法正常工作。
所以還有一個值得檢查的可能原因:)
添加回答
舉報