概要
Java インテグレーションを利用して、Java アプリケーションからメトリクス、トレース、ログを収集できます。
セットアップ
メトリクスの収集
アプリケーションで JMX メトリクスが公開されている場合、Datadog Agent から軽量の Java プラグインである JMXFetch (Java 1.7 以上とのみ互換) が呼び出され、MBean サーバーに接続してアプリケーションのメトリクスを収集します。また、監視対象のインスタンスのステータスを報告するサービスチェックを送信することも可能です。このプラグインは、Agent 内で稼働する DogStatsD サーバーを使用して Datadog Agent にメトリクスを送信します。このインテグレーションでは以下の JMX メトリクスも同様に使用されます。
- ActiveMQ
- Cassandra
- Solr
- Tomcat
- Kafka
注: DogStatsD を介して RATE メトリクスタイプを送信する場合、メトリクスは異なる Agent 間で適切な比較ができるようにアプリ内に GAUGE として表示されます。詳しくはメトリクスの送信: DogStatsD のドキュメントを参照してください。
インストール
JMX リモート接続を開くことができるかをご確認ください。Datadog Agent が JVM に接続するためには、両者が同じホスト上にある場合でもリモート接続が必要です。セキュリティ上の理由から、リスニングアドレスには 0.0.0.0
を使用しないことをお勧めします。同じ場所に配置された JVM と Agent には com.sun.management.jmxremote.host=127.0.0.1
を使用することをお勧めします。
構成
Agent をホスト上のバイナリとして実行している場合は、他の Agent インテグレーション同様に JMX チェックを構成します。Agent を Kubernetes の DaemonSet として実行している場合は、オートディスカバリーを使用して JMX チェックを構成します。
注: 複数の JMX チェックを実行するには、コンフィギュレーションファイルを jmx_<INDEX>.d/conf.yaml
の形式で作成します (jmx_1.d/conf.yaml
、jmx_2.d/conf.yaml
など)。各フォルダーは、conf.d
ディレクトリに保存し、コンフィギュレーションファイルに、is_jmx
を true
に設定したオプションを含める必要があります。
Datadog Agent コンテナを実行するための標準 gcr.io/datadoghq/agent:latest
イメージには JMX がインストールされていません。gcr.io/datadoghq/agent:latest-jmx
イメージを使用してください。このイメージは gcr.io/datadoghq/agent:latest
に基づいていますが、Agent が jmxfetch を実行するために必要な JVM が含まれています。
いずれかのコンテナで JMX チェックを実行するには、以下の手順を実行します。
JMX チェック構成ファイルを作成します。それには、ホストを参照するか、Datadog が公式にサポートしている以下の JMX インテグレーションの JMX チェック構成ファイルを使用します。
-v <HOST_FOLDER_PATH>:/conf.d
を使用して、Datadog Agent の conf.d/
フォルダー内にファイルをマウントします。詳細は、チェックテンプレートの設定ドキュメントを参照してください。
注: %%port%%
を使用すると問題が多いことがわかっています。問題が発生した場合の最善の回避策は、%%port%%
の代わりに、JMX ポートをハードコーディングすることです。
コンフィギュレーションオプション
オプション | 必須 | 説明 |
---|
custom_jar_paths | いいえ | Agent の JVM のクラスパスに追加されるカスタムの jar を指定できます。 |
jmx_url | いいえ | Agent がデフォルト以外の JMX URL に接続する必要がある場合は、ホストとポートの代わりにここで指定します。これを使用する場合は、name などを指定する必要があります。 |
is_jmx | いいえ | 1 つの長い JMX ファイルを使用する代わりに、各アプリケーションの各構成ファイルを作成できます。構成セクションの注で説明したように、各構成ファイルにオプションを含めます。 |
collect_default_jvm_metrics | いいえ | デフォルトの JVM メトリクス (jvm.* ) を収集するようにインテグレーションに指示します。デフォルトは true です。注: JMX 固有のメトリクスを必要としないインテグレーションを使用している場合は、collect_default_jvm_metrics: false を設定します |
collect_default_metrics | いいえ | 各インテグレーションには、収集するデフォルトの Bean のリストが記載された metrics.yaml ファイルが含まれています。これを True に設定すると、明示的に yaml ファイルに追加しなくても、これらのメトリクスが自動的に収集されます。通常、これを Autodiscovery とのセットアップに使用するには、コンフィギュレーションオブジェクトのサイズを小さくします。JMX メトリクスを Java トレースエージェントで収集する場合は、適用されません。 |
java_bin_path | いいえ | Agent がJava 実行可能ファイルまたはバイナリを検出できない場合、パスを指定します(たとえば C:/path/to/java.exe または /etc/alternatives/java ) |
java_options | いいえ | Java JVM オプション |
name | いいえ | jmx_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_timeout | いいえ | host と port または jmx_url を使用して JVM に接続するときの接続タイムアウト (ミリ秒単位)。 |
rmi_client_timeout | いいえ | 接続された JVM からの応答がない期間をミリ秒単位で指定します。その後、Agent は既存の接続を放棄して再試行します。 |
service | いいえ | このインテグレーショにより送信されるすべてのメトリクス、イベント、サービスチェックに service:<SERVICE> タグをアタッチします。 |
service_check_prefix | いいえ | サービスチェックのカスタムプレフィックス。たとえば my_prefix は、my_prefix.can_connect というサービスチェックを取得します。設定しない場合は、インテグレーション名がデフォルトで使用されます。 |
tools_jar_path | いいえ | process_name_regex が設定される場合に設定されます。 |
trust_store_path および trust_store_password | いいえ | SSL が有効な場合に設定する必要があります。 |
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 名または完全な 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
を指定できます。 - また、メトリクスタイプ(
gauge
、histogram
、counter
/rate
、monotonic_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 Explorer で jvm.heap_memory
、jvm.non_heap_memory
、jvm.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. Non-heap memory is calculated as follows: Metaspace + CompressedClassSpace + CodeCache 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 (gauge) | The rate of major garbage collections. Set new_gc_metrics: true to receive this metric. |
jvm.gc.minor_collection_count (gauge) | The rate of minor garbage collections. 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 fraction of time spent in major garbage collection. Set new_gc_metrics: true to receive this metric. Shown as permille |
jvm.gc.minor_collection_time (gauge) | The fraction of time spent in minor garbage collection. Set new_gc_metrics: true to receive this metric. Shown as permille |
注: jmx.d/conf.yaml で new_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.can_connect
Agent が監視対象の JVM インスタンスに接続できず、メトリクスを収集できない場合は、CRITICAL
を返します。それ以外の場合は、OK
を返します。
Statuses: ok, クリティカル
トラブルシューティング
JMX トラブルシューティングのコマンドと FAQ のリストを参照してください。
その他の参考資料