首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@SpringbootTest中缺少/actuator/prometheus

@SpringbootTest中缺少/actuator/prometheus
EN

Stack Overflow用户
提问于 2020-12-19 00:34:18
回答 3查看 2.1K关注 0票数 18

我使用的是springbooot 2.4.0,我添加了以下依赖项来启用prometheus指标:

代码语言:javascript
复制
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

然后,在我的application.properties中,我有以下属性

代码语言:javascript
复制
management.endpoints.web.exposure.include=*
management.metrics.enable.all=true

我正在尝试运行一个简单的集成测试,以查看我的自定义指标出现在/actuator/prometheus端点上。下面的代码

代码语言:javascript
复制
package com.example.demo;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.web.server.LocalServerPort;
import static io.restassured.RestAssured.given;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class IntegrationTest {

  @LocalServerPort
  private int port;

  private String baseUrl;

  @BeforeEach
  public void setup() {
      baseUrl = "http://localhost:" + port;
  }

  @Test
  public void metricsEndpoint() throws Exception {

    given().when().get(baseUrl + "/demo/actuator/prometheus")
            .then()
            .statusCode(200);
    }
}

我在这里得到的错误是

代码语言:javascript
复制
java.lang.AssertionError: 1 expectation failed.
Expected status code <200> but was <404>.

而如果我对springboot提供的任何其他端点重复相同的请求,我会正确地得到响应,例如,我尝试了/ actuator /health,/actuator/info,/actuator/metrics等。

这只发生在使用@Springboot注解的集成测试期间,这很奇怪,因为如果我运行我的应用程序,并使用postman向地址localhost:8080/actuator/prometheus发出请求,我会正确地得到响应。

这就像在测试期间不加载prometheus注册表一样。

有人能帮上忙吗?

提前谢谢。

编辑:这个解决方案是由Johannes Klug提出的。添加注释@AutoConfigureMetrics解决了我的问题

EN

回答 3

Stack Overflow用户

发布于 2021-01-04 17:52:25

我也面临着同样的问题。在对spring-context ConditionEvaluator进行了一些跟踪之后,我发现PrometheusMetricsExportAutoConfiguration上新引入的@ConditionalOnEnabledMetricsExport("prometheus")条件阻止了端点的加载。

这是由于https://github.com/spring-projects/spring-boot/pull/21658和影响spring-boot 2.4.x而导致的预期行为

Fix:将@AutoConfigureMetrics添加到测试中

代码语言:javascript
复制
@AutoConfigureMetrics
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class IntegrationTest {
票数 39
EN

Stack Overflow用户

发布于 2020-12-25 01:13:07

在Spring Boot 2.4.1中,这也发生在我身上

我唯一能想到的就是@SpringBootTest中包含的端点都使用了@Endpoint注释。

例如:

代码语言:javascript
复制
@Endpoint(id = "metrics")
public class MetricsEndpoint {}

@Endpoint(id = "loggers")
public class LoggersEndpoint {}

prometheus端点使用@WebEndpoint注释

代码语言:javascript
复制
@WebEndpoint(id = "prometheus")
public class PrometheusScrapeEndpoint {}

我不知道这是如何工作的,或者是一个可能的bug

票数 0
EN

Stack Overflow用户

发布于 2021-01-05 20:58:45

我在你的测试中看到,你在实际的执行器路径之前附加了"demo“。

代码语言:javascript
复制
given().when().get(baseUrl + "/demo/actuator/prometheus")
        .then()
        .statusCode(200);

正确的url应该是baseUrl+"/actuator/prometheus“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65360650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档