У меня есть приложение для весенней загрузки (версия 3.0.4):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.4</version>
<relativePath/>
</parent>
В application.yaml
приложения (src/main/resources
) у меня есть следующая конфигурация:
....
management:
server:
port: 8081
endpoints:
web:
exposure:
include: health,prometheus,info
endpoint:
info:
enabled: true
health:
enabled: true
probes:
enabled: true
show-details: always
prometheus:
enabled: true
...
Когда я запускаю приложение и получаю доступ к URL-адресу localhost:8081/actuator/prometheus
в своем браузере, я вижу длинный список метрик, и это ожидаемо.
Теперь я хочу реализовать тест, чтобы убедиться, что метрики prometheus доступны:
@Slf4j
@SpringBootTest(webEnvironment = RANDOM_PORT)
public class ActuatorTests {
@Autowired
protected TestRestTemplate testRestTemplate;
@LocalManagementPort
private int managementPort;
@Test
public void test1() {
ResponseEntity<String> forEntity = testRestTemplate.getForEntity("/actuator/prometheus", String.class);
assertEquals(HttpStatus.OK, forEntity.getStatusCode());
}
@Test
public void test2() {
ResponseEntity<String> actuatorResponse = testRestTemplate.getForEntity("http://localhost:" + managementPort + "/actuator/prometheus", String.class);
assertEquals(HttpStatus.OK, actuatorResponse.getStatusCode());
}
}
Оба теста провалены с одной и той же ошибкой:
org.opentest4j.AssertionFailedError:
Expected :200 OK
Actual :404 NOT_FOUND
Как я могу это исправить?
P.S.
ТАКЖЕ я попытался скопировать этот тест как есть: https://stackoverflow.com/a/75334796/2674303
но результат:
org.springframework.web.client.HttpClientErrorException$NotFound: 404 : "{"timestamp":"2023-05-31T22:09:49.535+00:00","status":404,"error":"Not Found","path":"/actuator/metrics"}"
Эта конфигурация в тестовой конфигурации устраняет проблему:
management:
prometheus:
metrics.export.enabled: true
Хитрость в том, что эта опция не нужна в приложении (поскольку значение по умолчанию равно true).
package org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus;
...
@ConfigurationProperties(prefix = "management.prometheus.metrics.export")
public class PrometheusProperties {
/**
* Whether exporting of metrics to this backend is enabled.
*/
private boolean enabled = true;
...
Я не смог найти место, но похоже, что какой-то стартовый тест весенней загрузки перезаписывает это значение по умолчанию. Не уверен, что этот тест имеет значение в случае, когда мне нужно изменить конфигурацию, чтобы он заработал.