스프링 부트 상태에 커스텀 상태 체크를 추가하는 방법
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
이렇게 하면 응용 프로그램에 몇 가지 유용한 엔드포인트가 추가됩니다.그 중 하나가 /health입니다.애플리케이션을 시작하고 /health 엔드포인트로 이동하면 이미 일부 데이터가 반환되는 것을 볼 수 있습니다.
{
"status":"UP",
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
스프링 부트 상태에 커스텀 상태 체크를 추가하는 방법
커스텀 헬스체크를 쉽게 추가할 수 있습니다.새로운 Java 클래스를 만들고 AbstractHealthIndicator에서 확장하여 doHealthCheck 메서드를 구현하기만 하면 됩니다.메서드는 몇 가지 유용한 메서드와 함께 전달된 빌더를 가져옵니다.상태가 정상이면 builder.up()을 호출하고 정상이면 builder.down()을 호출합니다.건강을 체크하기 위해 무엇을 할지는 전적으로 당신에게 달려 있습니다.서버에 ping을 하거나 파일을 체크하고 싶은 경우가 있습니다.
@Component
public class CustomHealthCheck extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder bldr) throws Exception {
// TODO implement some check
boolean running = true;
if (running) {
bldr.up();
} else {
bldr.down();
}
}
}
이는 새로운 헬스체크를 활성화하기에 충분합니다(@ComponentScan이 어플리케이션에 있는지 확인합니다).응용 프로그램을 다시 시작하고 브라우저를 /health 끝점으로 이동하면 새로 추가된 상태 점검이 표시됩니다.
{
"status":"UP",
"CustomHealthCheck": {
"status":"UP"
},
"diskSpace": {
"status":"UP",
"free":56443746,
"threshold":1345660
}
}
Spring Boot 2 이후x
@yuranos87에서 설명한 바와 같이 Spring Boot 2.X에서는 액튜에이터의 개념이 변경되었지만 구현으로 커스텀 헬스체크를 쉽게 추가할 수 있습니다.HealthIndicator또는 사후 대응 어플리케이션의 경우ReactiveHealthIndicator:
@Component
public class CacheHealthIndicator implements HealthIndicator {
@Override
public Health health() {
long result = checkSomething();
if (result <= 0) {
return Health.down().withDetail("Something Result", result).build();
}
return Health.up().build();
}
}
또는
@Component
public class CacheHealthIndicator implements ReactiveHealthIndicator {
@Override
public Mono<Health> health() {
return Mono.fromCallable(() -> checkSomething())
.map(result -> {
if (result <= 0) {
return Health.down().withDetail("Something Result", result).build();
}
return Health.up().build();
});
}
}
또한 다음을 사용하여 엔드포인트를 추가하거나 확장할 수 있습니다.@Endpoint또는@EndpointWebExtension. 여기서 엔드포인트는info,health더 많이요.따라서 를 사용하여 커스텀헬스 체크를 추가할 수 있습니다.@Endpoint하지만 더 쉽게 할 수 있습니다.HealthIndicator.
사용자 지정 상태 점검 및 사용자 지정 끝점에 대한 자세한 내용은 스프링 부팅 설명서를 참조하십시오.
애플리케이션 속성을 설정하는 것을 잊지 말아 주세요.설정하지 않으면 고객 상태 표시기가 표시되지 않습니다.
management.endpoint.health.show-details=always
스프링 부트 2X가 액튜에이터를 대폭 변경했습니다.기존 엔드포인트를 확장하기 위한 보다 우수한 새로운 메커니즘은@EndpointWebExtension.
즉, 헬스 엔드 포인트는 액튜에이터 자체에 의해 바로 사용할 수 있기 때문에 확장하기가 좀 까다롭습니다.beans 초기화 프로세스를 조작하지 않으면 어플리케이션은 2개의 내선번호가 표시되며 어느 것을 선택해야 할지 알 수 없기 때문에 기동할 수 없습니다.보다 쉬운 방법은 정보를 사용하여 확장하는 것입니다.
@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
@Value("${info.build.version}")
private String versionNumber;
@Value("${git.commit.id}")
private String gitCommit;
@Value("${info.build.name}")
private String applicationName;
...
@ReadOperation
public WebEndpointResponse<Map> info() {
URL도 다시 매핑할 수 있습니다.내 경우 /health보다 /status를 선호하며 /actuator/를 경로에 넣고 싶지 않습니다.
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
제가 /info를 선호하는 또 다른 이유는 /health의 기본값인 다음과 같은 중첩 구조를 얻지 못하기 때문입니다.
{
"status": {
"status": "ON",
언급URL : https://stackoverflow.com/questions/44849568/how-to-add-a-custom-health-check-in-spring-boot-health
'programing' 카테고리의 다른 글
| "JSX 요소 유형 '...'에 구성 또는 호출 시그니처가 없습니다" 오류는 무엇을 의미합니까? (0) | 2023.04.04 |
|---|---|
| 청구 필드를 삭제할 때 WooCommerce 오류가 발생했습니다. "계속하려면 주소를 입력하십시오." (0) | 2023.04.04 |
| Elastic Search 서버에서 json 파일(문서 100장)을 Import할 수 있는 방법이 있습니까? (0) | 2023.04.04 |
| Java 스크립트 파일, Visual Studio에서 영역을 추가하는 방법 (0) | 2023.04.04 |
| Java의 모델 클래스에서 직접 JSON 개체 만들기 (0) | 2023.04.04 |