Creación de una integración JMX
Esta guía describe la creación de una integración JMX utilizando el conjunto de herramientas para desarrolladores.
Configuración
Crear un andamiaje para la integración JMX
ddev create --type jmx MyJMXIntegration
La integración JMX contiene configuraciones específicas de init y de instancia:
init_config:
is_jmx: true # Identifica el tipo de integración como JMX.
collect_default_metrics: true # Recopila métricas declaradas en `metrics.yaml`.
instancias:
- host: <HOST> # nombre de host JMX
puerto: <PORT> # puerto JMX
...
Para ver más configuraciones de init
y instance
, consulta la documentación de la integración JMX.
Definir la métricas a recopilar
Selecciona las métricas que quieres recopilar de JMX. Para encontrar las métricas disponibles, consulta la documentación del servicio que quieres monitorizar.
También puedes utilizar herramientas como VisualVM, JConsole o jmxterm para explorar los beans JMX disponibles y sus descripciones.
Definir filtros de métricas
Edita metrics.yaml
para definir los filtros para recopilar métricas.
Para obtener más información sobre el formato de los filtros de métricas, consulta la integración JMX.
Los casos de tests JMXFetch proporcionan ejemplos del funcionamiento de los filtros de métricas.
Ejemplo de 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
Tests
Utilizando ddev
, puedes realizar tests del servicio JMX proporcionando un dd_environment
en tests/conftest.py
.
Por ejemplo:
@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}
Ejemplo 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)
Ejemplos reales de:
Herramientas JMX
Enumerar beans JMX utilizando 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:<JMX_PORT>
domains
beans
Resultado del ejemplo:
$ 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
Bienvenidos al terminal JMX. Escribe "help" para ver los comandos disponibles.
$>domains
#los siguientes dominios están disponibles
JMImplementation
com.sun.management
io.fabric8.insight
java.lang
java.nio
java.util.logging
jmx4perl
jolokia
org.apache.activemq
$>beans
#dominio = JMImplementation:
JMImplementation:type=MBeanServerDelegate
#dominio = com.sun.management:
com.sun.management:type=DiagnosticCommand
com.sun.management:type=HotSpotDiagnostic
#dominio = io.fabric8.insight:
io.fabric8.insight:type=LogQuery
#dominio = 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
[...]
Enumerar beans JMX utilizando JMXTerm con archivos jar adicionales
En el siguiente ejemplo, el archivo jar adicional es 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