🟢 Spring Framework 講座【第43回】アプリケーションの健全性チェック!〜Spring Boot Actuatorの活用〜

docs

前回、Docker Composeを使って、アプリケーションと周辺サービス(DBなど)を統合管理する方法を学びました。

アプリケーションを本番環境で安定稼働させるためには、単に起動させるだけでなく、「アプリケーションが今、正常に動いているか?」を継続的に監視し続ける必要があります。

今回は、Spring Bootが提供する運用監視のための強力な機能 Spring Boot Actuator(スプリングブート・アクチュエーター)について学びます。Actuatorは、アプリケーション内部の状態をHTTPエンドポイントを通じて外部に公開し、運用チームや監視ツールとの連携を容易にします。


1. Spring Boot Actuatorとは?

Actuatorは、Spring Bootアプリケーションに本番環境で役立つ機能(運用・監視・メトリクス・情報)を自動で追加するモジュールです。

  • 目的: アプリケーションのデプロイ後に、「ヘルスチェック」「環境設定の確認」「メトリクスの収集」などを外部から簡単に行えるようにする。

1-1. 導入方法

Actuatorの導入は、依存関係を追加するだけで完了します。

Groovy

dependencies {
    // 従来のSpring Webスターター
    implementation 'org.springframework.boot:spring-boot-starter-web'
    
    // Actuatorのスターターを追加
    implementation 'org.springframework.boot:spring-boot-starter-actuator' 
    
    // ...
}

この依存関係を追加するだけで、いくつかの監視用HTTPエンドポイントが自動的に利用可能になります。


2. Actuatorの主要なエンドポイント

Actuatorが公開する監視用のエンドポイントは、デフォルトでは /actuator/ 以下にあります。

2-1. ヘルスチェック:/actuator/health

最も重要で頻繁に使われるエンドポイントです。

  • 役割: アプリケーション全体の**健全性(Health)**をチェックし、正常な場合は UP を、異常な場合は DOWN を返します。
  • 対象: DB接続、ディスク容量、メッセージキュー接続など、Actuatorが自動で検知したコンポーネントの状態をまとめてチェックします。
  • 利用方法: 外部のロードバランサーやコンテナ管理ツール(Kubernetesなど)が、アプリケーションの死活監視のためにこのエンドポイントを定期的に叩きます。

レスポンス例(正常時)

JSON

{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "PostgreSQL",
        "validationQuery": "isValid"
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 1234567,
        "free": 987654
      }
    }
  }
}

2-2. アプリケーション情報:/actuator/info

  • 役割: アプリケーションに関する一般的な情報(バージョン、ビルド日時など)を公開します。
  • 設定: この情報は、application.yml や pom.xml のビルド情報(Maven/Gradle)から自動で取得されたり、開発者が任意で info. プレフィックスで始まるプロパティに設定した内容を公開します。

2-3. メトリクス情報:/actuator/metrics

  • 役割: アプリケーションの動作に関する詳細な**メトリクス(測定値)**を公開します。
  • 例: JVMのメモリ使用量、スレッド数、HTTPリクエストの処理時間、DB接続プールの利用状況など。
  • 活用: PrometheusやGrafanaなどの監視ツールがこのデータを収集し、グラフ化することで、システムの性能変化を視覚的に追跡できます。

3. Actuatorの公開設定(セキュリティと運用)

Actuatorのエンドポイントはアプリケーションの内部情報を公開するため、セキュリティ上の配慮が必要です。

3-1. エンドポイントの公開設定

デフォルトでは、ヘルス (health) と情報 (info) の一部しか公開されません。全てのエンドポイントを公開するには、application.yml で設定が必要です。

YAML

management:
  endpoints:
    web:
      exposure:
        # すべてのエンドポイントを公開 (本番環境では注意が必要)
        include: "*" 
        # 特定のエンドポイントだけを公開
        # include: health, info, metrics 
  # エンドポイントのパスをカスタマイズ(/manage/info など)
  server:
    base-path: /manage

3-2. セキュリティ

Actuatorのエンドポイントは、通常、Spring Securityと連携します。

  • 推奨: 運用情報であるため、管理者権限(ROLE ADMINなど)を持つユーザーだけがActuatorのエンドポイントにアクセスできるように設定することが強く推奨されます。

4. まとめ:Actuatorは運用監視の必需品

Actuatorは、開発フェーズでは見えづらいシステムの裏側を可視化し、運用フェーズにおけるトラブルシューティング性能監視を格段に容易にします。特にクラウド環境やコンテナ環境(Kubernetesなど)では、Actuatorのヘルスチェック機能が必須の要件となります。

✅ 本日のまとめ

  • Spring Boot Actuatorは、アプリケーションの健全性やメトリクスをHTTPエンドポイントで公開し、運用監視を容易にする。
  • /actuator/health は、DB接続やディスク容量などを含めたアプリケーションの健全性をチェックするために最も重要である。
  • /actuator/metrics は、CPU使用率やリクエスト処理時間などの詳細な性能データを監視ツールに提供する。
  • Actuatorのほとんどのエンドポイントは、management.endpoints.web.exposure.include で明示的に公開設定する必要がある。
  • 内部情報を含むため、ActuatorのエンドポイントへのアクセスはSpring Securityで制限すべきである。

🔔 次回予告

Actuatorの知識で、アプリケーションの「見える化」が進みました。次に、Webアプリケーションが複雑なユーザーインターフェースや動的な処理を必要とする際の技術について掘り下げます。

次回は、Spring MVCが提供するWeb層の高度なテクニックとして、**インターセプター(Interceptor)**の活用法を学びます。

次回:【第44回】処理の共通化と横断的関心事!〜インターセプター(Interceptor)の活用〜 にご期待ください!

コメント

タイトルとURLをコピーしました