前回は、spring-boot-actuatorを利用することでヘルスチェックを方法を書いた。
spring-boot-actuatorを利用することでSpring Bootのメトリクスを収集することもできる。
メトリクスの取得方法
spring-boot-actuatorを依存関係に追加して以下のURLを叩くだけ。
curl localhost:8080/metrics
{"mem":755200,
"mem.free":231637,
"processors":4,
"instance.uptime":3389,
"uptime":15520,
"systemload.average":3.64990234375,
"heap.committed":755200,
"heap.init":262144,
"heap.used":523562,
"heap":3728384,
"threads.peak":27,
"threads.daemon":25,
"threads":27,"classes":10410,
"classes.loaded":10410,
"classes.unloaded":0,
"gc.ps_scavenge.count":12,
"gc.ps_scavenge.time":295,
"gc.ps_marksweep.count":2,
"gc.ps_marksweep.time":202,
"httpsessions.max":-1,
"httpsessions.active":0,
"datasource.primary.active":0,
"datasource.primary.usage":0.0}
指定したメトリクスだけを収集したい場合にはurlに収集対象のメトリクスを含める。
curl localhost:8080/metrics/datasource.*
これでデータソースのアクティブコネクション数と利用率のみが取得できる。
{"datasource.primary.active":0,
"datasource.primary.usage":0.0}
余談だが、metricsに限らずspring-boot-actuatorに関する様々な設定はmanagementプロパティで設定できる。
以下はコンテキストパスをmonitorにした例。
management:
context-path: /monitor
この場合
・/monitor/healthでヘルスチェック実施
・/monitor/metricsでメトリクス収集
となる。
メトリクス収集対象の追加
RedisやElasticsearchとの接続に関するメトリクスなど、デフォルトでは対応していないメトリクスを追加することもできる。
やり方は簡単でorg.springframework.boot.actuate.endpoint.PublicMetricsを実装したクラスをSpringのBeanとしてするだけである。
@Component
public class SamplePublicMetrics implements PublicMetrics {
@Override
public Collection<Metric<?>> metrics() {
// Metricクラスを含んだ
return Arrays.asList(new Metric<>("sample.name",1);
}
}
curl localhost:8080/metrics/sample.*
{"sample.name":1}
Redisに対するメトリクスの収集
上記の方法でSpring Bootが接続している全てのRedisに対して以下の情報を取得する。
- 利用中のコネクション数
- アイドル状態のコネクション数
- 利用率(利用中のコネクション数 / 最大コネクション数)
仕事で必要になったので先にライブラリ化してみた。