Créer une intégration JMX
Ce guide décrit la création d’une intégration JMX à l’aide du kit de développement.
Configuration
Créer une architecture d’intégration JMX
ddev create --type jmx MyJMXIntegration
L’intégration JMX contient des configurations init et instance spécifiques :
init_config:
is_jmx: true # Spécifier qu'il s'agit d'une intégration de type JMX.
collect_default_metrics: true # Recueillir les métriques déclarées dans `metrics.yaml`.
instances:
- host: <HOST> # Hostname JMX
port: <PORT> # Port JMX
...
Consultez la documentation relative à l’intégration JMX pour découvrir d’autres configurations init
et instance
.
Définir les métriques à recueillir
Sélectionnez les métriques à recueillir à partir de JMX. Consultez la documentation relative au service à surveiller pour découvrir les métriques disponibles.
Vous pouvez utiliser des outils comme VisualVM, JConsole ou jmxterm pour explorer les beans JMX disponibles, ainsi que leurs descriptions.
Définir les filtres de métriques
Modifiez le fichier metrics.yaml
afin de définir les filtres pour recueillir les métriques.
Consultez l’intégration JMX pour en savoir plus sur le format des filtres de métriques.
Les scénarios de test JMXFetch fournissent des exemples d’utilisation des filtres de métriques.
Exemple de fichier 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
Effectuer des tests
Utilisez ddev
pour effectuer des tests sur le service JMX en définissant le paramètre dd_environment
dans tests/conftest.py
.
Par exemple :
@pytest.fixture(scope="session")
def dd_environment():
compose_file = os.path.join(HERE, 'compose', 'docker-compose.yaml')
with docker_run(
compose_file,
conditions=[
# Agent Kafka
CheckDockerLogs('broker', 'Monitored service is now ready'),
],
):
yield CHECK_CONFIG, {'use_jmx': True}
Exemple de test 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)
Exemples réels :
Outils JMX
Énumérer les beans JMX à l’aide de JMXTerm
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:<PORT_JMX>
domains
beans
Exemple de sortie :
$ 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
# Les domaines suivants sont disponibles
JMImplementation
com.sun.management
io.fabric8.insight
java.lang
java.nio
java.util.logging
jmx4perl
jolokia
org.apache.activemq
$>beans
#domain = JMImplementation:
JMImplementation:type=MBeanServerDelegate
#domain = com.sun.management:
com.sun.management:type=DiagnosticCommand
com.sun.management:type=HotSpotDiagnostic
#domain = io.fabric8.insight:
io.fabric8.insight:type=LogQuery
#domain = 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
[...]
Énumérer les beans JMX à l’aide de JMXTerm avec des fichiers jar supplémentaires
Dans l’exemple ci-dessous, le fichier jar supplémentaire est 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 <CHEMIN_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