Webエンジニアのメモ帳

技術的な話を中心に書いています。

Spring Boot Actuatorについて

Webアプリケーションなどを動かすとき、アプリが動いているかの監視(死活監視)をしたいことはよくあります。

またAPIなどでは、HTTPリクエストの成功率や、リクエストが遅れていないか(レイテンシ)などを確認したいこともあるでしょう。

Spring Bootを使って実装されているアプリケーションでは、Spring Boot Actuatorというモジュールを導入することで、これらを簡単に実現できます。

その方法を説明します。

死活監視の導入

まずは死活監視の導入です。

死活監視というのは、アプリが落ちていないかの確認です。

これを行うには、build.gradleに以下を記述するだけでOKです。

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

あとは/actuator/healthにアクセスするだけです。

たとえばローカルで動かしている場合は、localhost:8080/actuator/healthにアクセスします。

すると

{"status":"UP"}

と表示されるでしょう。

アプリが落ちている場合は/actuator/healthにアクセスしても何も返ってきませんから、定期的に/actuator/healthにアクセスして、レスポンスが返ってこなければアラートを飛ばす、というような使われ方が実務ではよくされます。

メトリクスの取得

メトリクスというのは、たとえばメモリの使用率だったり、アプリが何らかの処理を行う場合はその処理を行う時間だったり、そうしたデータの総称です。

まずはbuild.gradleに以下を記述します。

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-actuator'
  implementation 'io.micrometer:micrometer-registry-prometheus'
}

1行目で指定しているライブラリは、死活監視の導入の際にも使用したものです。

このライブラリを追加するだけで様々なエンドポイントが自動で追加されますが、これらのエンドポイントは、基本的にはデフォルトでは公開されていません。

ただし/actuator/healthはデフォルトで公開になっているので、死活監視は上に書いたように簡単にできた、というわけですね。

メトリクスは/actuator/prometheusエンドポイントから取得するので、application.ymlに以下のように記述を行い、このエンドポイントを公開する必要があります。

management:
  endpoints:
    web:
      exposure:
        include: "prometheus"

注意しないといけないのは、この設定を行う場合、デフォルトで公開設定がされているエンドポイントについても、使用する場合は記述が必要だということです。

つまり、/actuator/prometheusに加えデフォルトで公開になっている/actuator/healthも使用する場合は、以下のように記述する必要があります。

management:
  endpoints:
    web:
      exposure:
        include: "health, prometheus"

これで、/actuator/prometheusにアクセスするとメトリクスを取得できるようになります。

このメトリクスは、Prometheusサーバーによりスクレイピング可能な形となっています。

ここでは詳しくは触れませんが、気になる人は「Prometheus 監視」などで調べてみてください。