こんにちは、鈴木です。
Spring Boot の続きです。Spring Boot Actuator を使うと、システムの状態やメトリクスを確認することができます。
Spring Boot Actuator を導入する
導入方法は pom.xml に追記するだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ... <dependencies> <!-- 追加: ここから --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-actuator</artifactId> </dependency> <!-- 追加: ここまで --> ... </dependencies> </project> |
追加されるエンドポイント
Spring Boot Actuator を導入すると、システムの状態を確認するためのエンドポイントが追加されます。
追加されるエンドポイントをいくつかご紹介します。
- http://localhost:8080/autoconfig
自動設定 (auto-configuration) の候補とそれらが自動設定された/されなかった理由。 - http://localhost:8080/beans
Spring コンテナに登録されている Bean の一覧。 - http://localhost:8080/dump
スレッドダンプ。 - http://localhost:8080/env
ConfigurableEnvironment からのプロパティ一覧。 - http://localhost:8080/health
ヘルスチェック用の情報。デフォルトでは常に "ok" を返すので、運用で使用する場合は要カスタマイズ。 - http://localhost:8080/mappings
@RequestMapping のマッピング情報。 - http://localhost:8080/shutdown
シャットダウン。デフォルトでは無効化されている。 - etc...
上記を含めて、追加されるエンドポイントの一覧は「32. Endpoints」に書かれていますので、詳しくはそちらをご覧ください。
エンドポイントの有効化/無効化
エンドポイントは個別に有効化/無効化することができます。
例としてデフォルトでは無効化されているシャットダウン用のエンドポイントを有効化してみます。
手っ取り早くやるには、起動時のオプションで以下のように指定する方法です。
1 |
mvn -Dendpoints.shutdown.enabled=true spring-boot:run |
起動時のオプション以外にも、application.properties で指定する方法もあります。
1 2 |
# application.properties endpoints.shutdown.enabled=true |
シャットダウン用のエンドポイントは POST でのリクエストしか受け付けません。
Linux をご利用の場合は curl コマンドで以下のようにアクセスすると、シャットダウンすることができます。
1 |
curl -X POST localhost:8080/shutdown |
独自のヘルスチェックを実装する
デフォルトのヘルスチェックは常に "ok" を返すだけなので、独自のヘルスチェックを実装してみましょう。
独自のヘルスチェックを作成するには、以下のように HealthIndicator<String> を実装したクラスを作成するだけです。
health() メソッドで独自のヘルスチェックを行い、結果を文字列で返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.techscore.spring_boot_sample; import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.stereotype.Component; @Component public class CustomHealth implements HealthIndicator<String> { public String health() { // TODO 必要なチェックをして返す値を変える. return "good"; } } |
パスやポートなどを変更する
/env や /dump などにアクセスするだけで様々な情報を確認できて便利ですが、これらの情報は一般のユーザには見せたくない情報がほとんどだと思います。そこで、パスやポートなどを変更してアクセス制限しやすいようにすると良いでしょう。
設定のやり方は前回もご紹介しましたが、src/main/resources/ 以下に application.properties または application.yml を作成し、必要な項目を指定するだけです。src/main/resources/application.properties を作成したとすると、以下のように設定します。
1 2 3 4 5 6 |
# /manage/health などで受け付けるようになる. management.contextPath=/manage # 受け付けるポートとアドレス. management.port=8081 management.address=127.0.0.1 |
まとめ
最初は「ちょっとヘルスチェックとかできるようになるだけ」と思っていましたが、Spring Boot Actuator は思った以上の機能がありました。今回は紹介しませんでしたが、HTTP 以外にも JMX や SSH などにも対応しているようです。Spring のサイトにも「production-ready な機能」と書かれていることからも、本番運用で使うことを念頭に作られているようです。