JMX インテグレーションの作成

このガイドでは、Developer Toolkit を使用して JMX インテグレーションを作成する方法を説明します。

セットアップ

JMX インテグレーションの足場を作る

ddev create --type jmx MyJMXIntegration

JMX インテグレーションには、特定の init および instance コンフィギュレーションが含まれています。

init_config:
    is_jmx: true                   # インテグレーションタイプが JMX であることを識別します。
    collect_default_metrics: true  # `metrics.yaml` で宣言されたメトリクスを収集します。

instances:
  - host: <HOST>                   # JMX ホスト名
    port: <PORT>                   # JMX ポート
    ...

その他の init および instance のコンフィギュレーションについては、JMX インテグレーションのドキュメントを参照してください。

収集するメトリクスを定義する

JMX から収集したいメトリクスを選択します。利用可能なメトリクスについては、監視するサービスのドキュメントを参照してください。

また、VisualVMJConsolejmxterm などのツールを使って、利用できる JMX ビーンとその説明文を調べることができます。

メトリクスフィルターを定義する

metrics.yaml を編集し、メトリクスを収集するためのフィルターを定義します。

メトリクスフィルターのフォーマットについては、JMX インテグレーションを参照してください。

JMXFetch のテストケースは、メトリクスフィルターがどのように機能するかの例を示しています。

metrics.yaml の例:

jmx_metrics:
  - include:
      domain: org.apache.activemq
      destinationType: Queue
      attribute:
        AverageEnqueueTime:
          alias: activemq.queue.avg_enqueue_time
          metric_type: gauge
        ConsumerCount:
          alias: activemq.queue.consumer_count
          metric_type: gauge

テスト

ddev を使用し、 tests/conftest.pydd_environment を指定すると、JMX サービスに対するテストを行うことができます。

例:

@pytest.fixture(scope="session")
def dd_environment():
    compose_file = os.path.join(HERE, 'compose', 'docker-compose.yaml')
    with docker_run(
        compose_file,
        conditions=[
            # Kafka Broker
            CheckDockerLogs('broker', 'Monitored service is now ready'),
        ],
    ):
        yield CHECK_CONFIG, {'use_jmx': True}

e2e テスト例:


@pytest.mark.e2e
def test(dd_agent_check):
    instance = {}
    aggregator = dd_agent_check(instance)

    for metric in ACTIVEMQ_E2E_METRICS + JVM_E2E_METRICS:
        aggregator.assert_metric(metric)

    aggregator.assert_all_metrics_covered()
    aggregator.assert_metrics_using_metadata(get_metadata_metrics(), exclude=JVM_E2E_METRICS)

実例:

JMX ツール

JMXTerm を使用した JMX Bean のリストアップ

curl -L https://github.com/jiaqi/jmxterm/releases/download/v1.0.1/jmxterm-1.0.1-uber.jar -o /tmp/jmxterm-1.0.1-uber.jar
java -jar /tmp/jmxterm-1.0.1-uber.jar -l localhost:<JMX_PORT>
domains
beans

結果出力例:

$ curl -L https://github.com/jiaqi/jmxterm/releases/download/v1.0.1/jmxterm-1.0.1-uber.jar -o /tmp/jmxterm-1.0.1-uber.jar
$ java -jar /tmp/jmxterm-1.0.1-uber.jar -l localhost:1616
Welcome to JMX terminal. Type "help" for available commands.
$>domains
#following domains are available
JMImplementation
com.sun.management
io.fabric8.insight
java.lang
java.nio
java.util.logging
jmx4perl
jolokia
org.apache.activemq
$>beans
#ドメイン = JMImplementation:
JMImplementation:type=MBeanServerDelegate
#ドメイン = com.sun.management:
com.sun.management:type=DiagnosticCommand
com.sun.management:type=HotSpotDiagnostic
#ドメイン = io.fabric8.insight:
io.fabric8.insight:type=LogQuery
#ドメイン = java.lang:
java.lang:name=Code Cache,type=MemoryPool
java.lang:name=CodeCacheManager,type=MemoryManager
java.lang:name=Compressed Class Space,type=MemoryPool
java.lang:name=Metaspace Manager,type=MemoryManager
java.lang:name=Metaspace,type=MemoryPool
java.lang:name=PS Eden Space,type=MemoryPool
java.lang:name=PS MarkSweep,type=GarbageCollector
java.lang:name=PS Old Gen,type=MemoryPool
java.lang:name=PS Scavenge,type=GarbageCollector
java.lang:name=PS Survivor Space,type=MemoryPool
java.lang:type=ClassLoading
java.lang:type=Compilation
java.lang:type=Memory
java.lang:type=OperatingSystem
java.lang:type=Runtime
java.lang:type=Threading
[...]

JMXTerm と追加 jar を使用した JMX Bean のリストアップ

以下の例では、追加 jar は jboss-client.jar です。

curl -L https://github.com/jiaqi/jmxterm/releases/download/v1.0.1/jmxterm-1.0.1-uber.jar -o /tmp/jmxterm-1.0.1-uber.jar
java -cp <PATH_WILDFLY>/wildfly-17.0.1.Final/bin/client/jboss-client.jar:/tmp/jmxterm-1.0.1-uber.jar org.cyclopsgroup.jmxterm.boot.CliMain --url service:jmx:remote+http://localhost:9990 -u datadog -p pa$$word
domains
beans