ヘルスチェックを実装したい!AbstractHealthIndicatorを使用するよ

ヘルスチェック実装することは結構あります

今回はAbstractHealthIndicator を使用して Spring Boot で外部システムのヘルスチェックを実装する手順を説明します

1. 依存関係を追加する

spring-boot-starter-actuator をプロジェクトに追加します(Gradleの場合)

implementation 'org.springframework.boot:spring-boot-starter-actuator'

2. カスタムヘルスインディケーターを作成する

AbstractHealthIndicator を継承し、外部システムのヘルスチェックロジックを実装します

以下は、外部APIのレスポンスをチェックする例です

import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component
public class ExternalSystemHealthIndicator extends AbstractHealthIndicator {

    private final RestTemplate restTemplate;
    private static final String HEALTH_CHECK_URL = "https://example.com/health";

    public ExternalSystemHealthIndicator() {
        this.restTemplate = new RestTemplate(); // 必要に応じてBeanに変更してください
    }

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        try {
            // 外部システムのヘルスエンドポイントを呼び出す
            String response = restTemplate.getForObject(HEALTH_CHECK_URL, String.class);

            // 例: 正常なレスポンスが特定の文字列の場合
            if ("OK".equals(response)) {
                builder.up().withDetail("response", response);
            } else {
                builder.down().withDetail("response", response);
            }
        } catch (Exception ex) {
            builder.down(ex);
        }
    }
}

3. Actuatorを有効化する

application.ymlでActuator エンドポイントを有効化します

■ application.yml

management:
  endpoints:
    web:
      exposure:
        include: health
  endpoint:
    health:
      show-details: always

4. 動作確認

アプリケーションを起動し、/actuator/health エンドポイントにアクセスします

curl http://localhost:8080/actuator/health

正常であれば以下のようなレスポンスが得られます

{
  "status": "UP",
  "components": {
    "externalSystem": {
      "status": "UP",
      "details": {
        "response": "OK"
      }
    }
  }
}

外部システムがダウンしている場合、statusがDOWNになります

こんなこともできます

  • 複雑なチェックが必要な場合:doHealthCheck、doHealthCheck メソッドで任意のロジックを実装可能です
  • withDetail を使ってヘルスチェックの詳細情報を追加できます
  • テストの実装をしたい場合にはMockRestServiceServerを使ってRestTemplate をモック化し、テストケースを作成できます

ぜひあなたが実装したいヘルスチェックに合わせてカスタマイズしてみてください!

是非フォローしてください

最新の情報をお伝えします