JMX

JMX

概要

Java インテグレーションを利用して、Java アプリケーションからメトリクス、トレース、ログを収集できます。

セットアップ

メトリクスの収集

アプリケーションで JMX メトリクスが公開されている場合、Datadog Agent から軽量の Java プラグインである JMXFetch (Java 1.7 以上とのみ互換) が呼び出され、MBean サーバーに接続してアプリケーションのメトリクスを収集します。また、監視対象のインスタンスのステータスを報告するサービスチェックを送信することも可能です。このプラグインは、Agent 内で稼働する DogStatsD サーバーを使用して Datadog Agent にメトリクスを送信します。このインテグレーションでは以下の JMX メトリクスも同様に使用されます。

  • ActiveMQ
  • Cassandra
  • Solr
  • Tomcat
  • Kafka

: JMX チェックには、デフォルトでインスタンスあたり 350 メトリクスの制限が設けられています。メトリクスの追加が必要な場合は、Datadog のサポートチームにお問い合わせください。

インストール

JMX リモート接続を開くことができるかをご確認ください。Datadog Agent が JVM に接続するためには、両者が同じホスト上にある場合でもリモート接続が必要です。セキュリティ上の理由から、リスニングアドレスには 0.0.0.0 を使用しないことをお勧めします。同じ場所に配置された JVM と Agent には com.sun.management.jmxremote.host=127.0.0.1 を使用することをお勧めします。

コンフィギュレーション

Agent をホスト上のバイナリとして実行している場合は、JMX チェックを別の Agent インテグレーションとして構成します。Agent を Kubernetes の DaemonSet として実行している場合は、オートディスカバリーを使用して JMX チェックを構成します。

: 複数の JMX チェックを実行するには、コンフィギュレーションファイルを jmx_<INDEX>.d/conf.yaml の形式で作成します (jmx_1.d/conf.yamljmx_2.d/conf.yaml など)。各フォルダーは、conf.d ディレクトリに保存し、コンフィギュレーションファイルに、is_jmxtrue に設定したオプションを含める必要があります。

Datadog Agent コンテナを実行するための標準 gcr.io/datadoghq/agent:latest イメージには JMX がインストールされていません。gcr.io/datadoghq/agent:latest-jmx イメージを使用してください。このイメージは gcr.io/datadoghq/agent:latest に基づいていますが、Agent が jmxfetch を実行するために必要な JVM が含まれています。

いずれかのコンテナで JMX チェックを実行するには、以下の手順を実行します。

  1. JMX チェック構成ファイルを作成します。それには、ホストを参照するか、Datadog が公式にサポートしている以下の JMX インテグレーションの JMX チェック構成ファイルを使用します。

  2. -v <HOST_FOLDER_PATH>:/conf.d を使用して、Datadog Agent の conf.d/ フォルダー内にファイルをマウントします。詳細は、チェックテンプレートの設定ドキュメントを参照してください。

: %%port%% を使用すると問題が多いことがわかっています。問題が発生した場合の最善の回避策は、%%port%% の代わりに、JMX ポートをハードコーディングすることです。

コンフィギュレーションオプション
オプション必須説明
custom_jar_pathsAgent の JVM のクラスパスに追加されるカスタムの jar を指定できます。
jmx_urlAgent がデフォルト以外の JMX URL に接続する必要がある場合は、ホストとポートの代わりにここで指定します。これを使用する場合は、name などを指定する必要があります。
is_jmx1 つの長い JMX ファイルを使用する代わりに、各アプリケーションの各構成ファイルを作成できます。構成セクションの注で説明したように、各構成ファイルにオプションを含めます。
collect_default_jvm_metricsインテグレーションでデフォルトの JVM メトリクス (jvm.*) を収集するよう指示します。デフォルトは true です。
collect_default_metrics各インテグレーションは、収集するデフォルトの Bean のリストを含む metrics.yaml ファイルを含みます。これを True に設定すると、明示的に yaml ファイルに追加しなくても、これらのメトリクスが自動的に収集されます。通常、これを Autodiscovery とのセットアップに使用するには、コンフィギュレーションオブジェクトのサイズを小さくします。JMX メトリクスを Java トレースエージェントで収集する場合は、適用されません。
java_bin_pathAgent がJava 実行可能ファイルまたはバイナリを検出できない場合、パスを指定します(たとえば C:/path/to/java.exe または /etc/alternatives/java
java_optionsJava JVM オプション
namejmx_url とともに構成で使用されます。
new_gc_metricsガベージコレクションメトリクスに、より適したメトリクス名を使用するには true に設定します。デフォルトは false です
process_name_regexホストとポートまたは jmx_url を指定する代わりに、Agent は接続 API を使用して接続できます。これには、JDK をインストールして tools.jar のパスを設定する必要があります。
refresh_beans一致する MBeans リストを更新する更新期間。デフォルトは 600 秒です。この値を小さくすると、CPU 使用率が増加する場合があります。
refresh_beans_initial一致する MBeans リストを初期化直後に更新する更新期間。デフォルト値は refresh_beans
rmi_connection_timeouthostport または jmx_url を使用して JVM に接続するときの接続タイムアウト (ミリ秒単位)。
rmi_client_timeout接続された JVM からの応答がない期間をミリ秒単位で指定します。その後、Agent は既存の接続を放棄して再試行します。
serviceこのインテグレーショにより送信されるすべてのメトリクス、イベント、サービスチェックに service:<SERVICE> タグをアタッチします。
service_check_prefixサービスチェックのカスタムプレフィックス。たとえば my_prefix は、my_prefix.can_connect というサービスチェックを取得します。設定しない場合は、インテグレーション名がデフォルトで使用されます。
tools_jar_pathprocess_name_regex が設定される場合に設定されます。
trust_store_path および trust_store_passwordSSL が有効な場合に設定する必要があります。

conf パラメーターは、辞書のリストです。この辞書では、次の 2 つのキーのみが許可されます。

キー必須説明
includeフィルターの辞書 - これらのフィルターに一致する属性は、“exclude” フィルターにも一致している場合を除き、収集されます (以下を参照)。
excludeフィルターの辞書 - これらのフィルターと一致する属性は収集されません。

タグは実際の MBean 名に基づいてメトリクスに自動的に追加されます。明示的に補足タグを指定できます。たとえば、次の MBean が監視対象のアプリケーションで公開されているとします。

mydomain:attr0=val0,attr1=val1

mydomain というメトリクス (または Bean 内の属性によるそのバリエーション) をタグ attr0:val0、attr1:val1、domain:mydomain、simple:val0、raw_value:my_chosen_value、multiple:val0-val1 で作成します。

include キー内の指定したエイリアスが_キャメルケース_として書式設定されている場合、_スネークケース_に変換されます。たとえば MyMetricName は、Datadog では my_metric_name と表示されます。

フィルターの説明

include または exclude 辞書は次のキーをサポートします。

キー説明
domainドメイン名またはドメイン名のリスト (例: java.lang)。
domain_regexドメイン名に一致する正規表現のパターンまたはパターンリスト (例: java\.lang.*)。
bean または bean_nameBean 名または完全な Bean 名のリスト (例: java.lang:type=Compilation)。
bean_regex完全な Bean名に一致する正規表現のパターンまたはパターンリスト (例: java\.lang.*[,:]type=Compilation.*)。正規表現でキャプチャグループを使用して、タグ値として指定できます。上記のコンフィギュレーション例を参照してください。
classクラス名のリストのクラス (例: org.datadog.jmxfetch.SimpleTestJavaApp)。
class_regexクラス名に一致する正規表現のパターンまたはパターンリスト (例: org\.datadog\.jmxfetch\.SimpleTestJavaApp)。
exclude_tags最終メトリクスから削除するタグキーのリスト。メトリクスタグの粒度の向上に使用します (例: ["attr1", "id", "partition-id"])。
attribute属性名のリストまたは辞書 (詳細については以下を参照)。

:

  • domain_regex および bean_regex で定義された正規表現は、Java の正規表現形式に従う必要があります。このフィルターはバージョン 5.5.0 で追加されました。
  • 正規表現のパターン以外のすべての値では、大文字と小文字が区別されます。

これらのパラメーターに加えて、フィルターは Bean パラメーターで絞り込むことができる「カスタム」キーをサポートします。たとえば、Cassandra キャッシュに関するメトリクスを収集する場合は、type: - Caches フィルターを使用することが考えられます。

conf:
    - include:
          domain: org.apache.cassandra.db
          type:
              - Caches

属性フィルター

attribute フィルターは、次の 2 種類の値を受け入れます。

  • キーが、ターゲット属性の名前と一致する辞書:

    conf:
        - include:
              attribute:
                  maxThreads:
                      alias: tomcat.threads.max
                      metric_type: gauge
                  currentThreadCount:
                      alias: tomcat.threads.count
                      metric_type: gauge
                  bytesReceived:
                      alias: tomcat.bytes_rcvd
                      metric_type: counter
    
    • Datadog でメトリクス名になる属性の alias を指定できます。
    • また、メトリクスタイプ(gaugehistogramcounter/ratemonotonic_count)も指定できます。counter を選択すると、メトリクスに対して 1 秒あたりの rate が計算され、gauge として送信されます。
  • ターゲット属性名のリスト:

    conf:
        - include:
              domain: org.apache.cassandra.db
              attribute:
                  - BloomFilterDiskSpaceUsed
                  - BloomFilterFalsePositives
                  - BloomFilterFalseRatio
                  - Capacity
                  - CompressionRatio
                  - CompletedTasks
                  - ExceptionCount
                  - Hits
                  - RecentHitRate
    
    • メトリクスタイプはデフォルトで gauge です。
    • メトリクス名は jmx.<DOMAIN_NAME>.<ATTRIBUTE_NAME> です。

これは別のフィルタリングの例です。

instances:
    - host: 127.0.0.1
      name: jmx_instance
      port: 9999

init_config:
    conf:
        - include:
              bean: org.apache.cassandra.metrics:type=ClientRequest,scope=Write,name=Latency
              attribute:
                  - OneMinuteRate
                  - 75thPercentile
                  - 95thPercentile
                  - 99thPercentile

検証

Agent の status サブコマンドを実行し、JMXFetch セクションの JMX チェックを探します。

さらに、JMX チェックには、JMX アプリケーションからメトリクスを収集するデフォルトのコンフィギュレーションがあります。Metrics Explorerjvm.heap_memoryjvm.non_heap_memoryjvm.gc.cms.count をチェックします。

ログの収集

Agent v6.0 以上で使用可能

Java のログコレクションをセットアップして Datadog にログを送信するには、 個別のドキュメントを参照してください。

トレースの収集

Agent でトレースコレクションを有効化した後、Java アプリケーションのインスツルメンテーションに関するドキュメントを参照して Datadog にトレースを送信します。

収集データ

メトリクス

jvm.heap_memory
(gauge)
The total Java heap memory used.
Shown as byte
jvm.heap_memory_committed
(gauge)
The total Java heap memory committed to be used.
Shown as byte
jvm.heap_memory_init
(gauge)
The initial Java heap memory allocated.
Shown as byte
jvm.heap_memory_max
(gauge)
The maximum Java heap memory available.
Shown as byte
jvm.non_heap_memory
(gauge)
The total Java non-heap memory used.
Shown as byte
jvm.non_heap_memory_committed
(gauge)
The total Java non-heap memory committed to be used.
Shown as byte
jvm.non_heap_memory_init
(gauge)
The initial Java non-heap memory allocated.
Shown as byte
jvm.non_heap_memory_max
(gauge)
The maximum Java non-heap memory available.
Shown as byte
jvm.thread_count
(count)
The number of live threads.
Shown as thread
jvm.gc.cms.count
(count)
The total number of garbage collections that have occurred.
jvm.gc.major_collection_count
(count)
The number of major garbage collections that have occurred. Set `new_gc_metrics: true` to receive this metric.
jvm.gc.minor_collection_count
(count)
The number of minor garbage collections that have occurred. Set `new_gc_metrics: true` to receive this metric.
jvm.gc.parnew.time
(gauge)
The approximate accumulated garbage collection time elapsed.
Shown as millisecond
jvm.gc.major_collection_time
(gauge)
The approximate major garbage collection time elapsed. Set `new_gc_metrics: true` to receive this metric.
Shown as millisecond
jvm.gc.minor_collection_time
(gauge)
The approximate minor garbage collection time elapsed. Set `new_gc_metrics: true` to receive this metric.
Shown as millisecond

: jmx.d/conf.yamlnew_gc_metrics: true と設定すると、次のメトリクスが置き換えられます。

jvm.gc.cms.count   => jvm.gc.minor_collection_count
                      jvm.gc.major_collection_count
jvm.gc.parnew.time => jvm.gc.minor_collection_time
                      jvm.gc.major_collection_time

トラブルシューティング

JMX トラブルシューティングのコマンドと FAQ のリストを参照してください。

その他の参考資料