コンテンツにスキップ

JMX

JMX の定義

JMX の定義

Java 仮想マシン (JVM) が提供する運用管理と監視のための完全なフレームワークが JMX(Java Management Extensions)です。JMX は Java Management Extensions の略で、Java を管理するための拡張フレームワークです。JMX 技術は、Java アプリケーションを監視・管理するための完全なアーキテクチャと設計パターン群を定義しています。JMX の基盤は管理 Bean(managed bean、業界では一般に MBean と呼ばれます)で、MBean は依存性注入によってインスタンス化される各種クラスであり、JVM 内のリソースを表します。MBean は JVM 内のリソースを表すため、アプリケーションの特定の側面を管理したり、より一般的にはこれらのリソースの使用状況に関する統計を収集したりできます。

JMX の中核は MBean サーバーであり、このサーバーは MBean、同一 JVM 内のアプリケーション、そして外部世界をつなぐ媒介として機能します。MBean とのあらゆるやり取りは、このサーバーを介して行われます。通常、JMX API に直接アクセスできるのは Java コードのみですが、Jolokia のように、この API を HTTP などの標準プロトコルへ変換するアダプターもあります。

JMX は、VM 内部のランタイムデータ状態を外部に公開できます。ランタイムデータを MBean にカプセル化し、JMX Server で一元管理することで、外部プログラムが RMI でデータを取得できるようになります。

要するに、JMX はランタイムデータを RMI プロトコル経由で外部プログラムから取得できるようにします。これにより、VM 内部データを監視・操作するための窓口が提供されます。

代表的な JVM 指標収集方法

  1. StatsD 収集
  2. JMX Exporter 収集
  3. Jolokia 収集
  4. Micrometer 収集
  5. APM Agent: SkyWalking、OpenTelemetry など

jvm_collector_1

StatsD 収集

StatsD は、UDP(デフォルト)または TCP を待ち受けるデーモンで、シンプルなプロトコルで statsd クライアントから送られてきたデータを収集し、集約したうえで、graphite や influxdb などのバックエンドへ定期的に送信し、そこから可観測性プラットフォームで表示します。

現在では通常、StatsD システム全体を指し、クライアント(client)、サーバー(server)、バックエンド(backend)の 3 つの部分から成ります。クライアントはアプリケーションコードに組み込まれ、対応する metrics を StatsD server に送信します。

DataKit は StatsD server として、クライアントから送られてきたデータを受信できます。

jvm_statsd

StatsD 統合

JMX Exporter 収集

JMX Exporter は Java の JMX 機構を利用して JVM ランタイムのいくつかの監視データを読み取り、それを Prometheus が認識できる Metrics 形式に変換することで、Prometheus による監視収集を可能にします。

JMX Exporter

JMX Exporter は Java Agent として動作し、HTTP ポート経由でローカル JVM のメトリクスを公開します。独立した HTTP サービスとして実行し、リモートの JMX 対象を取得することもできますが、その場合は設定が難しい、プロセス指標(たとえばメモリや CPU 使用率)を公開できないなど、多くの欠点があります。そのため、JMX Exporter は Java Agent として実行することを強く推奨します。

JMX Exporter 収集

Jolokia 収集

Jolokia は現在最も主流な JMX 監視コンポーネントであり、Spring コミュニティ(SpringBoot、MVC、cloud)や現在主流のミドルウェアサービスでも JMX 監視に採用されています。Jolokia は型を持たないデータで、JSON という軽量なシリアライズ方式を用いて RMI 方式に代わります。

Jolokia は JMX コンポーネントを完全に互換・サポートしており、agent として任意の JAVA プログラムに組み込めます。特に WEB アプリケーションでは、複雑で理解しにくい MBean Filter のクエリ構文を、より実装しやすく操作しやすい HTTP リクエストの形式に変換します。RMI の開発上の難しさを隠すだけでなく、外部監視コンポーネントからの透過性も実現し、さらにテストと利用が容易です。

Jolokia

Jolokia は、JMX データ取得時に直面する RMI プロトコルの複雑さ、MBean クエリの不便さ、データシリアライズ、MBeanServer の管理などの問題を解決するためのものです。HTTP リクエストを使い、WEB サービスと同じポートへ直接アクセスするだけで JMX データを取得できます。

Jolokia は JMX データを取得する 2 つの方法を提供します。

javaagent 方式で、アプリケーション起動時に読み込む。

jvm_jolokia_1

プロキシ方式で、Agent を独立して実行する。

jvm_jolokia_2

Jolokia JVM 収集

Micrometer 収集

上記の方式はいずれも、業務指標を定義して公開することには対応していません。業務指標を公開するには、まずコードで定義し、そのうえで公開する必要があります。つまり、SDK の形で実装する必要があります。

JVM Micrometer 収集

APM ベンダー統合

APM ベンダー は APM を基盤として Metric を可観測性の一部として取り込みます。SkyWalking を例にすると、JMX を接続して Metric 情報を公開します。

SkyWalking

OpenTelemetry のメトリクス収集

フィードバック

このページは役に立ちましたか?