千分尺-普罗米修斯量规显示NaN

我正在尝试通过将Micrometer.io与Spring Boot 2.0.0.RELEASE结合使用来生成Prometheus指标。

严格引用要使用量规测量的状态对象是您的责任。

我尝试了一些不同的方法,但无法解决问题。这是我的一些试用代码。

import io.micrometer.core.instrument.*;

import io.swagger.backend.model.Product;

import io.swagger.backend.service.ProductService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import java.util.List;

import java.util.concurrent.atomic.AtomicInteger;

@RestController

@RequestMapping("metrics")

public class ExampleController {

private AtomicInteger atomicInteger = new AtomicInteger();

private ProductService productService;

private final Gauge productGauge;

@Autowired

public HelloController(ProductService productService,

MeterRegistry registry) {

this.productService = productService;

createGauge("product_gauge", productService.getProducts(), registry);

}

private void createGauge(String metricName, List<Product> products,

MeterRegistry registry) {

List<Product> products = productService.getProducts();

// #1

// this displays product_gauge as NaN

AtomicInteger n = registry.gauge("product_gauge", new AtomicInteger(0));

n.set(1);

n.set(2);

// #2

// this also displays product_gauge as NaN

Gauge

.builder("product_gauge", products, List::size)

.register(registry);

// #3

// this displays also NaN

testListReference = Arrays.asList(1, 2);

Gauge

.builder("random_gauge", testListReference, List::size)

.register(registry);

// #4

// this also displays NaN

AtomicInteger currentHttpRequests = registry.gauge("current.http.requests", new AtomicInteger(0));

}

@GetMapping(path = "/product/decrement")

public Counter decrementAndGetProductCounter() {

// decrement the gague by one

}

}

有没有人可以帮助解决这个问题?任何帮助,将不胜感激。

回答:

在所有情况下,您都必须对观察到的实例保持强烈的引用。当您的createGauge()方法退出时,所有函数堆栈分配的引用都可以进行垃圾回收。

为此#1,请atomicInteger像这样传递您的字段:registry.gauge("my_ai",

atomicInteger);。然后根据需要增加/减少。每当千分尺需要查询时,只要找到参考,便会一直使用。

对于#2,请传递您的productService字段和lambda。基本上,每当查询量规时,它将使用提供的对象调用该lambda:registry.gauge("product_gauge",

productService, productService -> productService.getProducts().size());

(不保证语法错误。)

以上是 千分尺-普罗米修斯量规显示NaN 的全部内容, 来源链接: utcz.com/qa/429139.html

回到顶部