使用 prometheus 的自定义计数器在 /actuator/prometheus 上不可见
Posted
技术标签:
【中文标题】使用 prometheus 的自定义计数器在 /actuator/prometheus 上不可见【英文标题】:Custom counter using prometheus not visible on /actuator/prometheus 【发布时间】:2020-02-08 19:19:14 【问题描述】:我正在尝试在我的 spring-boot 应用程序中添加自定义指标。我查看了许多示例,但仍然无法添加自定义计数器。
application.properties
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
代码
static final Counter requests =
Counter.build().namespace("java").name("requests_total").help("Total requests.")
.register();
@CrossOrigin
@GetMapping("/test")
public int processRequest()
requests.inc();
return (int) requests.get();
当我访问 API 时,我可以看到计数器值在增加。问题是我在 http://localhost:8080/actuator/prometheus
和 prometheus :9090
页面上找不到我新创建的指标。所以我认为计数器没有注册(??)。我在这里错过了什么?
【问题讨论】:
【参考方案1】:看起来您正在直接使用 Prometheus Java API。您创建的 Counter 已在 Prometheus Java API 的默认 CollectorRegistry
中注册,但未在 Micrometer 中注册,因为它正在实例化自己的 CollectorRegistry
,因此您的 Counter 未显示在那里。
您应该使用 Micrometer Counter
API,而不是直接使用 Prometheus Java API。这还有一个额外的好处,即您可以在完全不更改检测代码的情况下更换监控后端。
此外,您似乎想测量 HTTP 请求。这些通常是自动计时的。在您的 /actuator/prometheus
端点中查找名为 http_server_requests_seconds_[count,sum,max]
的度量标准系列。
【讨论】:
【参考方案2】:你可以做这样的事情。 Spring 会自动找到收集器注册表并连接它。
@Component
public class CustomeCounter
Counter mycounter;
public CustomCounter(CollectorRegistry registry)
mycounter = Counter.build().name("test").help("test").register(registry);
public void incrementCounter()
mycounter.inc();
@Component
public class Test
@Resource
private CustomCounter customCounter;
public void testInc()
customCounter.incrementCounter();
【讨论】:
以上是关于使用 prometheus 的自定义计数器在 /actuator/prometheus 上不可见的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Istio 的 Prometheus 配置 kubernetes hpa?
在 Spring Boot 中使用 prometheus 自定义指标