JMXデータ収集
最終更新日 - 27年2025月XNUMX日
LogicMonitorは、JMX収集方式を用いて、公開MBean(マネージドBean)を介してJavaアプリケーションからパフォーマンスと構成データを収集します。これらのMBeanは、メモリ、スレッドプール、アプリケーション固有のメトリックなど、Java仮想マシン(JVM)内の管理可能なリソースを表します。
JMXコレクションメソッドを使用してデータを収集するには、特定のMBeanとその属性の1つを参照するデータポイントを設定します。以下を指定します。
- MBean ObjectName - ドメインと 1 つ以上のキー値プロパティ。
たとえば、domain=java.lang、プロパティtype=Memory. - 属性 - MBean から収集する属性。
各MBeanは、名前でクエリ可能な1つ以上の属性を公開します。これらの属性は、次のいずれかを返します。
- プリミティブJavaデータ型(例:
int,long,doubleまたはstring) - データの配列(たとえば、プリミティブまたはネストされたオブジェクトの配列)
- データのハッシュ(例えば、ネストされた構造や属性セットを含むキーと値のペア)
LogicMonitor は、すべての JMX 属性タイプのデータ収集をサポートします。
注意:
LogicMonitor は、ネストされた構造をナビゲートするために使用される場合を除き、ドット (ピリオド) を含む JMX クエリをサポートしません。例:
- rep.Container は、フラットな属性名の場合は無効です。
- MemoryUsage が複合オブジェクトであり、その内部のフィールドで使用されている場合、MemoryUsage.used は有効です。
JMX データポイントを構成するときに、LogicMonitor はこの情報を使用して、各収集サイクル中に正しい値を識別して取得します。
MBeanとJMXアーキテクチャの技術的な詳細については、以下を参照してください。 OracleのJMXドキュメント.
単純な属性の例
属性が最上位のプリミティブの場合:
- MBeanオブジェクト名:
java.lang:type=Threading - MBean属性:
ThreadCount
LogicMonitor は JVM 内のスレッドの合計数を収集します。
ネストされた属性の例
属性が複合オブジェクトまたはネストされたオブジェクトの一部である場合は、次のようにドット/ピリオド区切り文字を使用します。
- MBeanオブジェクト名:
java.lang:type=Memory - MBean属性:
HeapMemoryUsage.used
LogicMonitor は、使用されているヒープ メモリの量を収集します。
マルチレベルセレクターの例
インデックス値を持つマップまたはネストされた構造からデータを収集するには:
- MBeanオブジェクト名:
LogicMonitor:type=rrdfs - MBean属性:
QueueMetrics.move.key1
LogicMonitorはキーに関連付けられた値を取得します key1 インデックスで識別されたマップから move 下 QueueMetrics MBean の属性。
CompositeDataとマップのサポート
一部の JMX MBean 属性は次のような構造化データを返します。
- CompositeData: ミニオブジェクトや辞書のような名前付き値のグループ。
- マップ: キーと値のペアのコレクション。
LogicMonitor は両方からの値の収集をサポートしています。
CompositeData へのアクセス例
CompositeData属性は、関連する値の箱のようなもので、各値には名前(フィールド)が付けられています。構造から特定のフィールドを収集するには、ドット(.) セパレーター。
MBean: java.lang:type=GarbageCollector,name=Copy
属性: LastGcInfo
値型: CompositeData
GC スレッド数の特定の値にアクセスするには、次を使用します。 LastGcInfo.GcThreadCount
注意: JMX のマップは CompositeData と同様に動作しますが、固定フィールドの代わりにキーを使用して値が取得されます。
TabularDataのサポート
一部のMBean属性は、行と列を持つテーブルに似た構造であるTabularData形式でデータを返します。LogicMonitorはこれらのテーブルから特定の値を抽出できます。
TabularData オブジェクトは通常、次の要素で構成されます。
- インデックス列: 各行を一意に識別するために使用されます (データベースの主キーのように)
- 値列: 収集したい実際のデータが含まれます
次のように指定することで値にアクセスできます。
- 行インデックス(キー列に基づく)
- 必要な値の列名
単一インデックスのTabluarDataの例
MBean java.lang:type=GarbageCollector,name=Copy 属性があります LastGcInfo子の値の1つである memoryUsageAfterGcは TabularData です。 
テーブルには2つの列があります– key and 値. コラム key テーブルのインデックスを作成するために使用されるため、インデックス値を指定して行を一意に見つけることができます。
たとえば、 key =”コードキャッシュ” 1行目を返します。
値を取得するには 値 行のインデックスの列 key "Eden Space"、次の式を使用します。 LastGcInfo.memoryUsageAfterGc.Eden Space.value
この表現では、 "Eden Space" 特定の行を識別するために使用されるキーであり、 値 データが収集される列です。
マルチインデックス TabularData の例
一部のテーブルでは、行を識別するために複数のインデックス列が使用されます。
このTabularData構造には4つの列があり、プロセスとヒープがインデックス列として機能します。これらのインデックス値の組み合わせによって、一意の行が識別されます。
コミットされた列の行の値を取得するには、 process=Tomcat and heap=Perm Gen、次の式を使用します。 LastGcInfo.memoryUsageAfterGc.Tomcat,Perm Gen.committed
ここでは、 Tomcat,Perm Gen 行を指定し、committed は目的の値を含む列です。
配列またはリストのサポート
一部のMBean属性は、値の配列またはリストを返します。LogicMonitorは、インデックスベースのアクセスを使用して、これらの配列またはリストの値からデータを収集することをサポートしています。
たとえば、次の MBean があります。 java.lang:type=GarbageCollector,name=Copy has an 属性: MemoryPoolNames、型: String[] 
この配列の最初の要素にアクセス/収集するには、式「MemoryPoolNames.0」を使用できます。ここで、「0」は配列のインデックス(0 ベース)です。
次のようにインデックスを変更することで配列要素にアクセスできます。
MemoryPoolNames.0 = "Eden Space"MemoryPoolNames.1="Survivor Space"
属性がJavaの場合も同じルールが適用されます。 List同じドットとインデックス表記を使用します。
配列またはリスト属性の JMX コレクションを有効にするには:
- Java アプリケーションが JMX メトリックを公開していることを確認します。
- JMX アクセス用のユーザー名とパスワードがデバイスのプロパティとして正しく設定されていることを確認します。
jmx.userjmx.pass
これらの資格情報により、コレクターは JMX エンドポイントに接続し、配列やリスト内の要素を含む属性データを取得できます。
JMXコレクションメソッドを使用したデータポイントの設定
- LogicMonitorで、次の場所に移動します モジュール新しいデータソースを追加するか、既存のモジュールを開いて、JMX コレクションのデータポイントを追加します。
詳細については、を参照してください。 カスタム モジュールの作成 or モジュール管理 製品ドキュメントに記載されています。 - 収集方法 フィールドで、「JMX」を選択します。

- 選択する 正規データポイントを追加する.
- 名前 フィールドにデータポイントの名前を入力します。
- 詳細説明 フィールドに説明を入力します。
- MBeanオブジェクト フィールドに、ドメインとプロパティを含む MBean パスを入力します。
- MBean属性 フィールドに、収集する特定の属性またはネストされたフィールドを入力します。
- メトリックタイプ フィールドで、応答のメトリック タイプを選択します。
- 必要に応じて、追加の設定を構成します。

- 選択する
保存します。
データポイントはモジュールに保存され、必要に応じてモジュールの追加設定を構成できます。詳細については、 カスタム モジュールの作成 or モジュール管理.
JMXデータ収集のトラブルシューティング
コレクターは、ドットを含む第一レベルのJMX属性をサポートしていません(.デフォルトでは、コレクターはネストされたデータにアクセスする際にドットをパス区切り文字として扱います。ドットが単に属性名の一部であり、階層を示す意図がない場合、次のような問題が発生する可能性があります。
- JMXデバッグウィンドウのANullPointerException、
- 投票結果のNaN(非数値)値、および
- データを正しく収集できなかった
JMXデータ収集の問題の軽減
ドットを含む属性によるデータ収集エラーを防ぐには、次の手順を実行します。
- MBean 内のドットを含む属性名を識別します。
例 (属性名):jira-software.max.user.count - ドットが属性名の一部であるか、ネストされたパスを示しているかを判断します。
- ドットが属性名の一部である場合は、各ドットをバックスラッシュ(
\.).
具体的な例を挙げますと、以下の通りです。jira-software\.max\.user\.count - ドットが構造内のナビゲーションを示す場合は、エスケープしないでください。
- ドットが属性名の一部である場合は、各ドットをバックスラッシュ(
- ドットが属性名の一部である場合にのみエスケープ形式を使用して、LogicModule または JMX デバッグ ウィンドウに属性を入力します。
- 今すぐポーリング機能または JMX デバッグ ウィンドウを使用してデータ収集を確認します。
属性解釈の例
| 属性フォーマット | コレクターコードでは次のように解釈されます |
jira-software.max.user.count | jira-software, max, user, count (フラット属性の場合は誤り) |
jira-software\.max\.user\.count | jira-software.max.user.count (正しい解釈) |
jira-software\.max.user\.count | jira-software.max, user.count |
jira-software.max.user\.count | jira-software, max, user.count |