使用 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 上不可见的主要内容,如果未能解决你的问题,请参考以下文章

Actuator Prometheus 的自定义指标

如何使用 Istio 的 Prometheus 配置 kubernetes hpa?

使用Prometheus针对自己的服务器采集自定义的参数

在 Spring Boot 中使用 prometheus 自定义指标

查询通过 prometheus 节点导出器文本文件收集器公开的自定义指标失败

将从 AWS Fargate Task 公开的自定义应用程序指标集成到 prometheus