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 監視」などで調べてみてください。