トップ OSS紹介 Micrometer

Micrometer

サポート対象

NRIのOpenStandiaが提供するMicrometer最新情報

Micrometer情報

Micrometerとは

Micrometerは、アプリケーションのメトリクス収集のための計測ライブラリです。様々なモニタリングシステム(Prometheus、Datadog、InfluxDB、Graphite、Elasticsearchなど)に対して、ベンダーに依存しない方法でメトリクスを収集し、出力することができます。アプリケーションコードを変更することなく、出力先を切り替えることが可能です。

主な機能

  • メトリクスの計測:カウンター、ゲージ、タイマー、分布統計などの基本的なメトリクスを計測できます。
  • 様々なモニタリングシステムへの出力:Prometheus、Datadog、InfluxDB、Graphite、Elasticsearch、JMXなど、多くのモニタリングシステムへの出力に対応しています。
  • タグ付け:メトリクスにタグ(ラベル)を付与することで、多次元的な分析が可能になります。
  • スケーラビリティ:大規模なアプリケーションでも効率的にメトリクスを収集できます。
  • Spring Bootとの統合:Spring Boot Actuatorとシームレスに統合されており、簡単にメトリクス収集を開始できます。

主な特徴

  • ベンダーニュートラル:特定のモニタリングシステムに依存しないAPIを提供します。
  • パフォーマンス:オーバーヘッドが小さく、アプリケーションのパフォーマンスに影響を与えにくい設計になっています。
  • 拡張性:カスタムメトリクスやカスタムレジストリを簡単に作成できます。
  • 豊富なドキュメント:詳細なドキュメントとサンプルコードが提供されています。

メリット・デメリット

メリット・必要性

  • ベンダーロックインの回避:モニタリングシステムの変更が容易になります。
  • 開発効率の向上:メトリクス収集のためのボイラープレートコード(メトリクスを定義し、記録するために繰り返し記述する必要がある定型的なコード)を削減できます。
  • 標準化:複数のアプリケーションで一貫した方法でメトリクスを収集できます。
  • 豊富なエコシステム:Spring Bootをはじめとする様々なフレームワークやライブラリとの統合が容易です。
  • 可観測性(Observability)の向上:メトリクスを通じてアプリケーションの内部状態を把握し、問題の早期発見やパフォーマンスの最適化に役立ちます。

デメリット・注意点・課題

  • 学習コスト:新しいAPIや概念を学ぶ必要があります。
  • 設定:出力先のモニタリングシステムに合わせて設定を行う必要があります。
  • メトリクスの設計:適切なメトリクスを設計する必要があり、設計が悪いと分析が難しくなる場合があります。
  • 依存関係:プロジェクトにMicrometerの依存関係を追加する必要があります。

OSS独自の専門的な情報

  • MeterRegistry: メトリクスを登録し、管理するためのインターフェースです。
  • Meters: カウンター、ゲージ、タイマー、分布統計などのメトリクスの種類です。
  • Tags: メトリクスに付与するラベルです。多次元的な分析に役立ちます。
  • Clock: 時間の計測に使用するインターフェースです。テストなどで時間を制御する場合に使用します。

類似プロダクト

  • Dropwizard Metrics: Java向けのメトリクスライブラリです。Micrometerに影響を与えています。
  • OpenTelemetry: メトリクス、ログ、トレースを包括的に扱うためのプロジェクトです。MicrometerもOpenTelemetryとの統合が進んでいます。

ユースケース

  • Spring Bootアプリケーションのモニタリング:Spring Boot Actuatorと組み合わせて、アプリケーションのパフォーマンスやリソース使用状況を監視します。
  • マイクロサービスアーキテクチャのモニタリング:複数のマイクロサービスからメトリクスを収集し、全体像を把握します。
  • Kubernetes環境のモニタリング:Prometheusと組み合わせて、Kubernetesクラスタ内のアプリケーションを監視します。

こんなお客さまにMicrometerの導入をオススメ

  • Javaアプリケーションの開発者
  • マイクロサービスアーキテクチャを採用している開発チーム
  • クラウドネイティブ環境でアプリケーションを運用しているチーム
  • アプリケーションの可観測性を向上させたいと考えている方

動作環境

MicrometerはJava VM上で動作します。Java 8以上を推奨します。

Micrometerのライセンス

Micrometerは、Apache 2.0ライセンスです。Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と公開が認められています。

製品ダウンロード

MicrometerはMaven Central Repositoryで公開されています。MavenやGradleなどのビルドツールを使用して簡単にプロジェクトに組み込むことができます。Mavenの場合は、以下のようになります。

<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

micrometer-coreはコアライブラリで、micrometer-registry-prometheusはPrometheusへの出力をするためのレジストリです。Prometheus以外のモニタリングシステムに出力する場合は、対応するレジストリの依存関係を追加します。

Spring Bootを使用している場合は、spring-boot-starter-actuatorを依存関係に追加することで、Micrometerが自動的に構成されます。ビルドにMavenを使用している場合は、以下を追加します。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

そして、`application.properties`に以下を記述してアプリケ−ションを起動すれば、Micrometerによるメトリクスの計測が有効になります。


management.endpoints.web.exposure.include=*

以下のように/actuatorエンドポイントにアクセスすると、メトリクスが確認できる各種エンドポイントが確認できます。

curl -s "http://localhost:8080/actuator"| python3 -mjson.tool
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
・・・(省略)・・・
"threaddump": {
"href": "http://localhost:8080/actuator/threaddump",
"templated": false
},
"prometheus": {
"href": "http://localhost:8080/actuator/prometheus",
"templated": false
},
・・・(省略)・・・
}
}

Prometheus用のエンドポイント(http://localhost:8080/actuator/prometheus)にアクセスすると、以下のようなメトリクスが取得できます。

# HELP jvm_threads_states_threads The current number of threads
# TYPE jvm_threads_states_threads gauge
jvm_threads_states_threads{state="runnable",} 7.0
jvm_threads_states_threads{state="blocked",} 0.0
jvm_threads_states_threads{state="waiting",} 11.0
・・・(省略)・・・

将来性

MicrometerはCNCFのプロジェクトとして活発に開発が進められており、OpenTelemetryとの統合など、今後も機能拡張や改善が期待されます。クラウドネイティブ環境におけるメトリクス収集の標準的なライブラリとしての地位を確立していくことが予想されます。

学習・習得方法

  • 公式ドキュメントを読む:公式ドキュメントは詳細で分かりやすく、多くのサンプルコードが含まれています。
  • Spring Boot Actuatorのドキュメントを読む:Spring Bootを使用している場合は、Actuatorのドキュメントも参考にすると良いでしょう。
  • サンプルコードを試す:GitHubリポジトリには多くのサンプルコードが含まれています。
  • オンラインコースやチュートリアルを利用する:オンラインでMicrometerに関するコースやチュートリアルが提供されている場合があります。

FAQ

Q:Micrometerはどのモニタリングシステムに対応していますか?

A:Prometheus、Datadog、InfluxDB、Graphite、Elasticsearch、JMXなど、多くのモニタリングシステムに対応しています。

Q:Spring Bootを使用していない場合でもMicrometerを使用できますか?

A:はい、Spring Bootを使用していなくてもMicrometerを使用できます。ただし、Spring Bootとの統合により、設定が簡単になるというメリットがあります。

Q:メトリクスにタグを付けるメリットは何ですか?

A:タグを付けることで、メトリクスを多次元的に分析できます。例えば、HTTPリクエストのステータスコードやパスごとにメトリクスを分析できます。

用語集

  • メトリクス (Metrics):システムやアプリケーションのパフォーマンスや状態を表す数値データです。
  • レジストリ (Registry):メトリクスを登録し、管理するコンポーネントです。
  • メーター (Meter):カウンター、ゲージ、タイマー、分布統計などのメトリクスの種類です。
  • タグ (Tag):メトリクスに付与するラベルです。
  • カウンター (Counter):単調増加するメトリクスです。例えば、リクエスト数などをカウントする場合に使用します。
  • ゲージ (Gauge):現在の値を表すメトリクスです。例えば、メモリ使用量などを表す場合に使用します。
  • タイマー (Timer):処理にかかった時間を計測するメトリクスです。
  • 分布統計 (Distribution Summary):値の分布を表すメトリクスです。平均値、最大値、最小値、パーセンタイルなどを計算できます。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Prometheus
    サポート対象

    Prometheus

    プロメテウス。GO言語で書かれたオープンソースのモニタリングツールです。

  • InfluxDB

    InfluxDB

    InfluxDBはオープンソースの時系列データベース(Time series database)です

  • Elasticsearch
    サポート対象

    Elasticsearch

    エラスティックサーチ。Elastic社が開発するオープンソースの全文検索エンジンです。

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。