JMX
Incident Management が一般に使用できるようになりました。 Incident Management が広範に使用できるようになりました。

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 を使用して、接続する Agent を構成し、必要に合わせて編集します。以下はサンプルファイル jmx.d/conf.yaml です。

init_config:
  #custom_jar_paths:
  #  - <CUSTOM_JAR_FILE_PATH>.jar
  #is_jmx: true

instances:
  - host: "<JMX_INSTANCE_ENDPOINT>"
    port: "<JMX_PORT>"
    user: "<USER_NAME>"
    password: "<PASSWORD>"

    jmx_url: "service:jmx:rmi:///jndi/rmi://myhost.host:9999/<CUSTOM_PATH>" # optional

    name: "<JMX_INSTANCE_NAME>"
    java_bin_path: "<JAVA_PATH>"
    java_options: "-Xmx200m -Xms50m"
    trust_store_path: "<TRUST_STORE_PATH>.jks"
    trust_store_password: "<PASSWORD>"

    rmi_connection_timeout: 20000
    rmi_client_timeout: 15000

    process_name_regex: ".*<PROCESS_NAME>.*"
    tools_jar_path: /usr/lib/jvm/java-7-openjdk-amd64/lib/tools.jar
    refresh_beans: 600
    tags:
      - "env:dev"
      - "<TAG_KEY>:<TAG_VALUE>"

    conf:
      - include:
          domain: "<DOMAIN_NAME_1>"
          tags:
              simple: $attr0
              raw_value: "<CHOOSEN_VALUE>"
              multiple: $attr0-$attr1
          bean:
            - "<BEAN_NAME_1>"
            - "<BEAN_NAME_2>"
          attribute:
            attribute1:
              metric_type: counter
              alias: "jmx.<METRIC_NAME_ATTRIBUTE_1>"
            attribute2:
              metric_type: gauge
              alias: "jmx.<METRIC_NAME_ATTRIBUTE_2>"
            attribute3:
              metric_type: monotonic_count
              alias: "jmx.<METRIC_NAME_ATTRIBUTE_3>"

      - include:
          domain: "<DOMAIN_NAME_2>"
        exclude:
          bean:
            - "<EXCLUDED_BEAN_NAME>"
      - include:
          domain_regex: "<DOMAIN_REGEX>"
        exclude:
          bean_regex:
            - "<EXCLUDED_BEAN_NAME_REGEX>"
      - include:
          bean_regex: regex_topic=(.*?)
          attribute:
            attribute1:
              metric_type: gauge
              alias: "jmx.<ATTRIBUTE_NAME_WITH_REGEX_TAG>"

          ## The following submits jmx.<ATTRIBUTE_NAME_WITH_REGEX_TAG> bean with tags:
          ## `hostregex:<beanParameter>`
          ## `typeregex:<beanParameter>`
          ## `contextregex<beanParameter>`
          ## `optional:tag`
          tags:
              TypeRegex: $1
              HostRegex: $2
              contextRegex: $3
              optional: tag

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

Datadog Agent コンテナを実行するための標準 datadog/agent:latest イメージには JMX がインストールされていません。datadog/agent:latest-jmx イメージを使用してください。このイメージは datadog/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_metrics各インテグレーションは、収集するデフォルトの Bean のリストを含む metrics.yaml ファイルを含みます。これを True に設定すると、明示的に yaml ファイルに追加しなくても、これらのメトリクスが自動的に収集されます。通常、これを Autodiscovery とのセットアップに使用するには、構成オブジェクトのサイズを小さくします。
namejmx_url とともに構成で使用されます。
java_bin_pathAgent が Java 実行可能ファイルを検出できない場合に設定する必要があります。
java_optionsJava JVM オプション
trust_store_path および trust_store_passwordSSL が有効な場合に設定する必要があります。
process_name_regexホストとポートまたは jmx_url を指定する代わりに、Agent は接続 API を使用して接続できます。これには、JDK をインストールして tools.jar のパスを設定する必要があります。
tools_jar_pathprocess_name_regex が設定される場合に設定されます。
refresh_beans一致する MBeans リストを更新する更新期間。デフォルトは 600 秒です。この値を小さくすると、CPU 使用率が増加する場合があります。
rmi_connection_timeouthostport または jmx_url を使用して JVM に接続するときの接続タイムアウト (ミリ秒単位)。
rmi_client_timeout接続された JVM からの応答がない期間をミリ秒単位で指定します。その後、Agent は既存の接続を放棄して再試行します。

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_name完全な Bean 名のリスト (例: java.lang:type=Compilation)。
bean_regex完全な Bean 名の正規表現によるリスト (例: java\.lang.*[,:]type=Compilation.*)。正規表現でキャプチャグループを使用して、タグ値として指定できます。上の構成例を参照してください。
attribute属性名のリストまたは辞書 (詳細については以下を参照)。

domain_regexbean_regex で定義されている正規表現は、Java の正規表現形式に従う必要があります。

domain_regex および bean_regex フィルターはバージョン 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 でのメトリクス名になります)。メトリクスタイプには 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 アプリケーションから 11 のメトリクスを収集します。jvm.heap_memoryjvm.non_heap_memory、または jvm.gc.cms.count については、Metrics Explorer を参照してください。

ログの収集

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 トラブルシューティングのコマンドとよくあるご質問のリストを参照してください。

その他の参考資料