このガイドでは、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 から収集したいメトリクスを選択します。利用可能なメトリクスについては、監視するサービスのドキュメントを参照してください。
また、VisualVM、JConsole、jmxterm などのツールを使って、利用できる 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.py で dd_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