だいぶ前になりますが、Javaコミュ@福岡 勉強会1910で「Micrometer入門」というタイトルで発表してきました。

僕の発表資料はこちらです。

発表で使ったサンプルアプリはここに置きました。
https://github.com/matsumana/micrometer-example



Micrometerとは?

Javaでメトリクスを取るためのライブラリです。

現在、世の中には沢山のモニタリングサービス/ツールが存在しますが、アプリケーション側で依存ライブラリを切り替えるだけで様々なモニタリングサービス/ツールに対応する事が出来ます。
Micrometerのオフィシャルサイトで述べられているように、JavaのロギングライブラリのSLF4Jのようなイメージです。

Spring Boot Actuatorでもだいぶ前から採用されているので、既にお馴染みという感じがありますね。


MeterとTag

Micrometerでは、MeterとTagを使ってメトリクスを記録します。

  • Meter (メトリクスを記録するもの)
    • Counter
      • 値が単純増加するメトリクス(例: ログ出力回数など)
    • Gauge
      • 値が上下するメトリクス(例: 現在処理中のリクエスト数など)
    • Timer
      • メソッドの処理時間など
    • LongTaskTimer
      • 時間がかかる処理の時間計測
    • DistributionSummary
      • イベントのサンプル分布(例: レイテンシ、HTTPのリクエスト/レスポンスサイズなど)
    • など
  • Tag (メトリクスの付加情報)
    • key-valueのペア

Micrometerの使い方

自分でMicrometerを使ってメトリクスを記録する

まずは、Micrometerソースリポジトリにあるsampleを見てみるのがいいと思います。

また、LINE社が開発しているArmeriaというMicroservice向けのRPCフレームワークでもMicrometerを使っているので参考になると思います。
例えば、以下がリクエストに関するメトリクス(リクエスト成功数/失敗数, レイテンシ, リクエストサイズ, レスポンスサイズ)を記録している箇所です。

Spring Bootアプリで使う

Spring Boot Actuatorと自分が使いたいモニタリングシステム用のライブラリを依存に追加すれば、Auto ConfigurationによってMicrometerが簡単に使えるようになります。

必須ライブラリ:

  • org.springframework.boot:spring-boot-starter-actuator

追加で必要な各種モニタリングシステム用のライブラリ:

  • io.micrometer:micrometer-registry-prometheus *Prometheus用
  • io.micrometer:micrometer-registry-datadog *Datadog用
  • io.micrometer:micrometer-registry-elastic *Elasticsearch用
  • その他にも色々あります

詳しくは公式ドキュメントを参照してください。

具体的にどんなメトリクスが取れるようになるかは、以前まとめています。

また、実際にサービスをモニタリングする場面ではレイテンシもモニタリングすると思います。
以下の記事がとてもわかりやすいのでおすすめです。



以上です。
ご参加いただいた皆さん、ありがとうございました!