【发布时间】:2019-07-29 20:17:04
【问题描述】:
我编写了一个 Spring Boot 应用程序,我想通过 Micrometer 向 Prometheus 公开自定义指标。这是一个代码 sn-p,我在其中递增一个计数器(有效)并尝试设置几个仪表(无效):
@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
// ...
}
完整的源代码在这里:https://github.com/alexwoolford/htu21d_logger/tree/master/htu21d-logger-spring
sensorReading 对象中的fahrenheit 字段是float。仪表存在于输出中,但值为NaN(即不是数字):
# HELP measurements_total
# TYPE measurements_total counter
measurements_total 82.0
...
# HELP humidity
# TYPE humidity gauge
humidity NaN
...
# HELP fahrenheit
# TYPE fahrenheit gauge
fahrenheit NaN
...
我看过类似的帖子,例如Micrometer/Prometheus How do I keep a gauge value from becoming NaN? 和 Micrometer - Prometheus Gauge displays NaN,但我无法从这些答案中具体弄清楚我需要做什么。
我还尝试创建一个变量并使用 lambda 更新它,例如
Metrics.gauge("humidity", humidity, humidity -> sensorReading.getHumidity());
...然后这个指标完全消失了(甚至没有NaN)。
这个问题与其他问题略有不同,因为我没有使用缓存,而是尝试使用全局注册表,这大概是最简单的选择。
【问题讨论】:
标签: spring-boot prometheus micrometer