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 指標収集方法¶
- StatsD 収集
- JMX Exporter 収集
- Jolokia 収集
- Micrometer 収集
- APM Agent: SkyWalking、OpenTelemetry など
StatsD 収集¶
StatsD は、UDP(デフォルト)または TCP を待ち受けるデーモンで、シンプルなプロトコルで statsd クライアントから送られてきたデータを収集し、集約したうえで、graphite や influxdb などのバックエンドへ定期的に送信し、そこから可観測性プラットフォームで表示します。
現在では通常、StatsD システム全体を指し、クライアント(client)、サーバー(server)、バックエンド(backend)の 3 つの部分から成ります。クライアントはアプリケーションコードに組み込まれ、対応する metrics を StatsD server に送信します。
DataKit は StatsD server として、クライアントから送られてきたデータを受信できます。
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 として実行することを強く推奨します。
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方式で、アプリケーション起動時に読み込む。
プロキシ方式で、Agent を独立して実行する。
Micrometer 収集¶
上記の方式はいずれも、業務指標を定義して公開することには対応していません。業務指標を公開するには、まずコードで定義し、そのうえで公開する必要があります。つまり、SDK の形で実装する必要があります。
APM ベンダー統合¶
APM ベンダー は APM を基盤として Metric を可観測性の一部として取り込みます。SkyWalking を例にすると、JMX を接続して Metric 情報を公開します。



