<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
これにより、いくつかの便利なエンドポイントがアプリケーションに追加されます。それらの1つは/ 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
を使用する方がはるかに簡単です。
カスタムヘルスチェック および カスタムエンドポイント の詳細については、スプリングブートのドキュメントを参照してください。
Spring Boot 2.Xは、アクチュエータを大幅に変更しました。 @EndpointWebExtension
を介して、既存のエンドポイントを拡張するための新しい優れたメカニズムが有効になります。
そうは言っても、ヘルスエンドポイントは、アクチュエータ自体によって箱から出してすぐに提供されるため、拡張が少し難しくなります。 Beanの初期化プロセスを操作しないと、2つの拡張機能が表示され、どちらを選択するかがわからないため、アプリケーションを起動できません。簡単な方法は、代わりにinfoを使用して拡張することです。
@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を再マップすることもできることを忘れないでください。私の場合、私は/ statusよりも/ healthを好み、/ actuator /はパスにしたくない:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status
私が/ infoを好むもう1つの理由は、このネスト構造が得られないためです。これは/ healthのデフォルトです:
{
"status": {
"status": "ON",