我正在尝试以编程方式读取仪表,如下所示:
获取注册表:
MeterRegistry registry = Metrics.globalRegistry.getRegistries().iterator().next();
Run Code Online (Sandbox Code Playgroud)
读取测量值:
double systemCpuUsage = registry.get("system.cpu.usage").gauge().measure().iterator().next().getValue();
Run Code Online (Sandbox Code Playgroud)
问题是有时我会得到NaN
.
我在文档中读到了这一点:为什么我的仪表报告 NaN 或消失?
但我不确定我该怎么做。另外,我正在阅读 Spring Boot 执行器的“内置”仪表(由 公开management.metrics.enable.process.cpu.usage=true
),因此我无法更改它的构造。
我编写了一个 Spring Boot 应用程序,我想使用Micrometer向 Prometheus 公开自定义指标。这是一个代码片段,我在其中递增计数器(有效)并尝试设置几个仪表(无效):
@Scheduled(cron = "*/2 * * * * *") // run every 2 seconds
private void logTemperature() throws UnknownHostException {
// get measurement
SensorReader sensorReader = new SensorReader();
SensorReading sensorReading = sensorReader.getSensorReading();
Metrics.counter("measurements").increment();
Metrics.gauge("fahrenheit", sensorReading.getFahrenheit());
Metrics.gauge("humidity", sensorReading.getHumidity());
// do stuff with measurement
// ...
}
Run Code Online (Sandbox Code Playgroud)
完整的源代码在这里:https : //github.com/alexwoolford/htu21d_logger/tree/master/htu21d-logger-spring
对象中的fahrenheit
字段sensorReading
是 a float
。输出中存在仪表,但值是NaN
(即不是数字):
# HELP measurements_total
# TYPE measurements_total counter
measurements_total 82.0
...
# HELP humidity
# …
Run Code Online (Sandbox Code Playgroud)