IK.AM

@making's tech note


Pivotal Web Services / Pivotal Cloud FoundryはSpring Bootのベストなプラットフォーム

🗃 {Programming/Java/org/springframework/boot}
🏷 Cloud Foundry 🏷 Pivotal Web Services 🏷 Pivotal Cloud Foundry 🏷 Spring Boot 🏷 Java 
🗓 Updated at 2017-06-27T08:03:40Z  🗓 Created at 2017-06-12T07:34:15Z   🌎 English Page

目次

はじめに

Cloud Foundry(特に、Pivotal Web Services (以降、PWS)及びPivotal Cloud Foundry (以降、PCF))はSpring Bootアプリケーションをデプロイする先として、最適なプラットフォームになるべく機能が追加されている。

Cloud FoundryとSpring Bootの連携としては

が挙げられるが、特にわかりやすく便利なのがApps ManagerのSpring Boot Actuator連携。以前にも紹介したが、PCF 1.11でUIが変わりさらに機能が加わるので改めて紹介する。PWSではすでに利用可能になっている。

Apps ManagerにサポートされているActuatorエンドポイント

Spring Boot Actuatorには現状、デフォルトで次のエンドポイントが利用可能である。Apps Managerがサポートしているエンドポイントにマークを入れた。

Path Short Description Apps Manager Support
/auditevents 認証の成功失敗に関する監査ログを表示
/autoconfig AutoConfigurationのうち、有効になっているもの、なっていないものを列挙
/beans Springに管理されているBean一覧を表示
/configprops @ConfigurationPropertiesのついたBeanに実際に設定されている値を表示
/dump スレッドダンプを表示 🆕
/env 環境変数や設定されたプロパティを表示
/health データベースなどのヘルスチェック結果を表示
/info アプリケーションの情報を表示
/loggers ログレベルの表示及び変更
/metrics アプリケーションのメトリクスを表示
/mappings @RequestMappingで定義されているパスとContollerメソッドのマッピング一覧を表示
/trace リクエストのトレースログを表示 🆕
/heapdump GZipで圧縮されたhprofのheapdumpファイルをダウンロード 🆕

✅がついているものが前回紹介した時からApps Managerがサポートしていた機能で、🆕がついているものがPCF 1.11で追加されるもの(PWSではすでに利用可能)。

Actuator連携の嬉しい点は認可対策が自動で行われる点。 Spring Boot 1.5からActuatorのエンドポイントがデフォルトで認可制御されるようになった。Actuatorは機密情報を含む場合があるため、基本的にセキュリティの設定が必須であるが、PWS / PCFにデプロイした場合は、認可設定をしたままでもApps Manager上からはアクセスできるので、開発者がケアしないといけない点が減る。

Memo:

ちなみに、/health/infoエンドポイントはデフォルトで、誰でもアクセスできるようになっている。 ただし、/healthに関しては、認可されてない場合は個別サービスのヘルスチェック結果は表示されず、全てを総合してUPDOWNかだけ返す。

プロジェクトの設定

普通のSpring BootプロジェクトをSpring Initializrから作成すればいいが、Acutator連携を試したいので、spring-boot-start-actuatorが必要。また、対応するSpring Bootのバージョンは1.5以上。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

infoエンドポイントにアプリケーションのバージョン情報を出力させたい場合は、次のようにspring-boot-maven-pluginbuild-infogoalを追加する必要がある。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>build-info</goal>
            </goals>
        </execution>
    </executions>
</plugin>

また、infoエンドポントにGitのメタ情報を出力させたい場合は、次のように

<plugin>
    <groupId>pl.project13.maven</groupId>
    <artifactId>git-commit-id-plugin</artifactId>
</plugin>

さらに、Git情報にremoteのurlなど詳細な情報を含めたい場合はapplication.propertiesに次の設定が必要である。

management.info.git.mode=full

以上の設定は特にApps Manager連携に特化したものではない。

Memo:

自己証明書使ったPivotal Cloud Foundryの場合、application.propertiesに次の設定も必要。

management.cloudfoundry.skip-ssl-validation=true

アプリケーションのデプロイ

Pivotal Web Servicesを使う場合は、アカウントを作成して

$ cf login -a api.run.pivotal.io

でログイン。

$ ./mvnw clean package -DskipTests=true

$ cf push your-app-name -p target/you-app-name-0.0.1-SNAPSHOT.jar 

でデプロイ完了。

Apps Managerにログインして、デプロイしたアプリケーションを開き、左上にSpring Bootマークが出ていたらAcutaotr連携成功。

healthエンドポイント

一番わかりやすいhealthエンドポイントから。Apps Managerの「Instances」を開くと、/healthエンドポイントの結果が出力される。(この例ではMySQLとRabbitMQに接続している)

どこかに障害が発生していると赤文字でDOWNが表示される。

「View JSON」をクリックすると、JSONの出力結果がそのまま表示される。

$ cf scale your-app-name -i 2

でスケールアウトしても、各インスタンスの情報がそれぞれ出力されてGood。

連携サービスが多くなれば多くなるほどこの機能は重宝する。

infoエンドポイント

infoエンドポイントの情報は「Settings」タブの真ん中あたりの「Spring Info」に表示される。

Gitのコミット情報が表示されている。

SHAハッシュのリンクをクリックすればRemote先(Githubなど)のコミットログに飛べる。

地味だけど、右上にもコミットのリンクが表示されている。

image

「VIEW RAW JSON」をクリックすれば/infoのJSONの出力結果がそのまま表示される。アプリケーションのバージョンはここから確認できる。

loggersエンドポイント

「Logs」タブを見ると「CONFIGURE LOGGING LEVELS」ボタンが見える。

このボタンを押すとログレベル変更ダイアログが出てくる。

変更したいロガーをFilterに入力し、

変更したいレベルをクリックすれば、指定したロガーのレベル変更される。子のロガーのレベルも変更される。

ちなみにSpring Bootアプリに限らず、▶︎ボタンを押せばログがWebSocketで流れてくる。

ここまでは、すでにサポートされていた機能である。

dumpエンドポイント

ここから、新機能。まずはdumpエンドポイント。「Threds」タブを見ると、アプリケーションの現在のスレッド一覧と状態が表示される。

スレッドをクリックすると、スレッドダンプが表示される。

スケールアウトしている場合は、インスタンスの指定ができる。

image

スレッドの状態でフィルタリングもできる。

「Download」を押せばスレッドダンプがダウンロードされるし、「REFRESH」ボタンを押せばスレッドダンプが更新される。

traceエンドポイント

次にtraceエンドポント。「Trace」タブを見ると、直近のリクエストログされる。

行を選択すると、そのリクエストのレスポンスタイムとリクエストヘッダ、レスポンスヘッダが表示される。

デフォルトでは全インスタンスのリクエストログが集約されるが、インスタンスを指定することもできる。「REFRESH」ボタンを押せばリクエストログが更新される。

image

heapdumpエンドポイント

最後にheapdumpエンドポイント。「Overview」タブの「Instances」欄で右端のボタンをクリックするとそのインスタンスのHeap Dump、Trace、Thread Dumpへのリンクが表示される。

「Heap Dump」をクリックすると、GZip形式でHeap Dumpがダウンロードできる。

展開したファイルはhprof形式である。

Eclipse Memory Analyzerなどでそのまま解析可能である。

解析したいタイミングでWeb UIからHeap Dumpをダウンロードできるのはとても便利。

まとめ

Pivotal Web Services及びPivotal Cloud Foundry 1.11のSpring Boot Actuator連携を紹介した。 今後もActuator連携は強化されていくはず。個人的にはメトリクス連携が早く欲しい。

Actuator連携以外にも冒頭で示したようにCloud FoundryとSpring Bootの連携は多くあり、このブログで他の機能も紹介していく予定である。

追記

↓の動画に言いたいことが全て詰まっていました。

Cloud FoundryはSpring Bootのベストなプラットフォームなので、Spring Bootでアプリを書いたらまずはPivotal Web Servicesにデプロイしてみてほしい。


✒️️ Edit  ⏰ History  🗑 Delete