Información general

La integración de Java te permite recopilar métricas, trazas (traces) y logs desde tu aplicación de Java.

Configuración

Recopilación de métricas

Los checks de JMX tiene un límite de 350 métricas por instancia. Consulta las opciones de configuración. Si necesitas más métricas, ponte en contacto con el soporte de Datadog.

Si tu aplicación expone métricas de JMX, un complemento ligero de Java llamado JMXFetch (sólo compatible con Java >= v1.7.) es llamado por el Datadog Agent para conectarse con el servidor MBean y recopilar tus métricas de aplicación. También envía checks de servicio que informan sobre el estado de tus instancias monitorizadas. Este complemento envía métricas al Datadog Agent utilizando el servidor DogStatsD que se ejecuta en el Agent. Estas integraciones también utilizan las métricas de JMX:

  • ActiveMQ
  • Cassandra
  • Solr
  • Tomcat
  • Kafka

Nota: Al enviar un tipo de métrica RATE a través de DogStatsD, la métrica aparece como GAUGE en la aplicación para garantizar una comparación relevante entre diferentes Agents. Para obtener más información, consulta la documentación Envío de métricas: DogStatsD.

Instalación

Asegúrate de que puedes abrir una conexión remota de JMX. Se necesita una conexión remota para que el Datadog Agent se conecte a la máquina virtual Java (JVM), incluso cuando ambos están en el mismo host. Por razones de seguridad, se recomienda no utilizar 0.0.0.0 para la dirección de escucha, y utilizar com.sun.management.jmxremote.host=127.0.0.1 para una máquina virtual Java (JVM) y un Agent colocados.

Configuración

Si ejecutas el Agent como binario en un host, configura tu check de JMX como cualquier otra integración del Agent. Si ejecutas el Agent como DaemonSet en Kubernetes, configura tu check de JMX utilizando la detección automática.

  • Configura el Agent para conectarse a JMX. Edita el archivo jmx.d/conf.yaml, en la carpeta conf.d/ en la raíz de tu directorio de configuración del Agent. Consulta las opciones de configuración a continuación o la init_config y las plantillas de la instancia para ver todas las opciones de configuración disponibles.

      init_config:
        is_jmx: true
        collect_default_metrics: true
        # custom_jar_paths:
        #  - <CUSTOM_JAR_FILE_PATH>.jar
    
      instances:
        - host: localhost
          port: port
          user: username
          password: password
          name: jmx_instance_name
    
  • Reinicia el Agent

Nota: Para ejecutar más de un check de JMX, crea archivos de configuración con el formato jmx_<INDEX>.d/conf.yaml, por ejemplo: jmx_1.d/conf.yaml, jmx_2.d/conf.yaml, etc. Cada carpeta debe almacenarse en el directorio conf.d, con la opción is_jmx establecida en true en el archivo de configuración.

La imagen estándar gcr.io/datadoghq/agent:latest para ejecutar el contenedor del Datadog Agent no tiene JMX instalado. Utiliza la imagen gcr.io/datadoghq/agent:latest-jmx. Esta imagen está basada en gcr.io/datadoghq/agent:latest, pero incluye una máquina virtual Java (JVM), que el Agent necesita para ejecutar jmxfetch.

Para ejecutar un check de JMX en uno de tus contenedores:

  1. Crea un archivo de configuración del check de JMX haciendo referencia al host, o utilizando un archivo de configuración del check de JMX para una de las integraciones de Datadog compatibles oficialmente:

  2. Monta este archivo dentro de la carpeta conf.d/ de tu Datadog Agent : -v <HOST_FOLDER_PATH>:/conf.d. Para obtener más infomación, consulta la documentación Configuración de plantillas de checks.

Nota: El uso de %%port%% ha demostrado generar problemas en la práctica. Si experimentas algún problema, la mejor solución es sustituir %%port%% por un puerto de JMX codificado.

Opciones de configuración
OpciónObligatorioDescripción
custom_jar_pathsNoPermite especificar jars personalizados que se añaden a la ruta de clase de la JVM del Agent.
jmx_urlNoSi el Agent necesita conectarse a una URL de JMX no predeterminada, especifícala aquí en lugar de un host y el puerto. Si utilizas esto, deberás especificar un name para la instancia.
is_jmxNoPermite crear archivos de configuración diferentes para cada aplicación en lugar de utilizar un único archivo de JMX largo. Incluye la opción en cada archivo de configuración como se explica en la nota de la sección Configuración.
collect_default_jvm_metricsNoIndica la integración que recopila las métricas de JVM por defecto (jvm.*). Por defecto es true.
Nota: Si estás utilizando una integración que no necesita métricas de JMX específicas, establece collect_default_jvm_metrics: false
collect_default_metricsNoCada integración contiene un archivo metrics.yaml que contiene una lista de beans por defecto para recopilar. Cuando se configura como True, se recopilan automáticamente esas métricas sin agregarlas explícitamente al archivo yaml. Esto se utiliza normalmente para definir la configuración con Autodiscovery para reducir el tamaño del objeto de configuración. Esto no es aplicable a la recopilación de métricas JMX con Java Tracing Agent.
java_bin_pathNoEspecifica la ruta a tu archivo ejecutable o binario de Java si el Agent no puede encontrarlo, por ejemplo: C:/path/to/java.exe o /etc/alternatives/java
java_optionsNoOpciones de JVM de Java
nameNoSe utiliza junto con jmx_url.
new_gc_metricsNoEstablécelo en true para utilizar mejores nombres de métrica para las métricas de recopilación de elementos no usados. Por defecto es false.
process_name_regexNoEn lugar de especificar un host y un puerto o jmx_url, el Agent puede conectarse utilizando la API adjunta. Para ello es necesario tener instalado el JDK y establecer la ruta a tools.jar.
refresh_beansNoPeriodo de actualización para actualizar la lista de MBeans coincidentes. Por defecto es 600 segundos. La disminución de este valor puede resultar en un mayor uso de la CPU.
refresh_beans_initialNoPeriodo de actualización para actualizar la lista de MBeans coincidentes inmediatamente después de la inicialización. Por defecto es el valor de refresh_beans.
rmi_connection_timeoutNoEl tiempo de espera de la conexión, en milisegundos, cuando se conecta a una JVM utilizando host y port o una jmx_url.
rmi_client_timeoutNoEspecifica la duración sin respuesta de la JVM conectada, en milisegundos, tras la cual el Agent abandona una conexión existente y vuelve a intentarlo.
serviceNoAdjunta una etiqueta service:<SERVICE> a cada métrica, evento y check de servicio emitidos por esta integración.
service_check_prefixNoPrefijo personalizado del check de servicio, por ejemplo my_prefix, para obtener un check de servicio llamado my_prefix.can_connect. El nombre de la integración se utiliza por defecto si no se establece.
tools_jar_pathNoDebe definirse cuando se configura process_name_regex.
trust_store_path y trust_store_passwordNoDebe establecerse si SSL está activado.

El parámetro conf es un lista de diccionarios. Sólo se permiten 2 claves en este diccionario:

ClaveObligatorioDescripción
includeUn diccionario de filtros: se recopila cualquier atributo que coincida con estos filtros, a menos que también coincida con los filtros de “exclusión” (véase más abajo).
excludeNoUn diccionario de filtros: los atributos que coincidan con estos filtros no se recopilarán.

Las etiquetas se añaden automáticamente a métricas basándose en el nombre real del MBean. Puedes especificar explícitamente etiquetas suplementarias. Por ejemplo, asumiendo que el siguiente MBean es expuesto por tu aplicación monitorizada:

mydomain:attr0=val0,attr1=val1

Crearía una métrica llamada mydomain (o alguna variación según el atributo dentro del bean) con etiquetas: attr0:val0, attr1:val1, domain:mydomain, simple:val0, raw_value:my_chosen_value, multiple:val0-val1.

Si especificas un alias en una clave include con formato camel case, se convierte a snake case. Por ejemplo, MyMetricName aparece en Datadog como my_metric_name.

Descripción de los filtros

Cada diccionario include o exclude admite las siguientes claves:

ClaveDescripción
domainUn nombre de dominio o lista de nombres de dominio, por ejemplo: java.lang.
domain_regexUn patrón de expresión regular (regex) o lista de patrones que coincidan con el nombre de dominio, por ejemplo: java\.lang.*.
bean o bean_nameUn nombre de bean o lista de nombres completos de bean, por ejemplo: java.lang:type=Compilation.
bean_regexUn patrón de expresión regular (regex) o lista de patrones que coincidan con los nombres completos de los beans, por ejemplo: java\.lang.*[,:]type=Compilation.*. Puedes utilizar grupos de captura en tu expresión regular (regex) para suministrar como valores de etiqueta. Consulta el ejemplo de configuración anterior.
classUna clase de lista de nombres de clase, por ejemplo: org.datadog.jmxfetch.SimpleTestJavaApp.
class_regexUn patrón de expresión regular (regex) o lista de patrones que coincidan con los nombres de las clases, por ejemplo: org\.datadog\.jmxfetch\.SimpleTestJavaApp.
exclude_tagsUn lista de claves de etiqueta para eliminar las métricas finales. Esto puede utilizarse para mejorar la cardinalidad de la etiqueta de métrica, por ejemplo: ["attr1", "id", "partition-id"].
attributeUna lista o un diccionario de nombres de atributos (consulta más abajo para más detalles).

Notas:

  • Las expresiones regulares (regex) definidas en domain_regex y bean_regex deben ajustarse al formato de expresiones regulares de Java. Estos filtros fueron añadidos en la versión 5.5.0.
  • Excepto los patrones de expresión regular (regex), todos los valores distinguen entre mayúsculas y minúsculas.

Además de estos parámetros, los filtros admiten claves “personalizadas” que permiten filtrar por parámetros de bean. Por ejemplo, si deseas recopilar métricas en relación con la caché de Cassandra, podrías utilizar el filtro type: - Caches:

conf:
    - include:
          domain: org.apache.cassandra.db
          type:
              - Caches

Filtro de atributos

El filtro attribute puede aceptar dos tipos de valores:

  • Un diccionario cuyas claves coinciden con los nombres de los atributos de destino:

    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
    
    • Puedes especificar un alias para el atributo que se convierte en el nombre de la métrica en Datadog.
    • También puedes especificar el tipo de métrica: gauge, histogram, counter/rate o monotonic_count. Si eliges counter, se calcula una rate por segundo para la métrica y se envía como gauge.
  • Una lista de nombres de atributos de destino:

    conf:
        - include:
              domain: org.apache.cassandra.db
              attribute:
                  - BloomFilterDiskSpaceUsed
                  - BloomFilterFalsePositives
                  - BloomFilterFalseRatio
                  - Capacity
                  - CompressionRatio
                  - CompletedTasks
                  - ExceptionCount
                  - Hits
                  - RecentHitRate
    
    • El tipo de métrica es por defecto gauge.
    • El nombre de métrica es jmx.<DOMAIN_NAME>.<ATTRIBUTE_NAME>.

He aquí otro ejemplo de filtrado:

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

Validación

Ejecuta el subcomando de estado del Agent y busca tu check de JMX en la sección JMXFetch.

Además, los checks de JMX tienen una configuración por defecto que recopila métricas de tu aplicación JMX. Comprueba el Explorador de métricas en búsqueda de: jvm.heap_memory, jvm.non_heap_memory o jvm.gc.cms.count.

Recopilación de logs

Disponible para la versión 6.0 o posterior del Agent

Consulta la documentación específica sobre cómo configurar la recopilación de logs Java para reenviar tus logs a Datadog.

Recopilación de trazas

Luego de activar la recopilación de trazas con tu Agent, consulta la documentación exclusiva para instrumentar tu aplicación Java para enviar sus trazas a Datadog.

Datos recopilados

Métricas

jvm.heap_memory
(gauge)
Total de memoria heap Java utilizada.
Se muestra como byte
jvm.heap_memory_committed
(gauge)
Total de memoria heap Java comprometida para su uso.
Se muestra como byte
jvm.heap_memory_init
(gauge)
Total de memoria heap Java asignada.
Se muestra como byte
jvm.heap_memory_max
(gauge)
Máxima memoria heap Java disponible.
Se muestra como byte
jvm.loaded_classes
(gauge)
Número de clases cargadas actualmente.
jvm.non_heap_memory
(gauge)
Total de memoria no-heap Java utilizada. La memoria no-heap se calcula de la siguiente manera: Metaspace + CompressedClassSpace + CodeCache
Se muestra como byte
jvm.non_heap_memory_committed
(gauge)
Total de memoria no-heap Java comprometida para su uso.
Se muestra como byte
jvm.non_heap_memory_init
(gauge)
Memoria inicial no-heap Java asignada.
Se muestra como byte
jvm.non_heap_memory_max
(gauge)
Máxima memoria no-heap Java disponible.
Se muestra como byte
jvm.thread_count
(count)
Número de subprocesos activos.
Se muestra como subproceso
jvm.gc.cms.count
(count)
El número total de recopilaciones de elementos no usados que se han producido.
jvm.gc.major_collection_count
(gauge)
El índice de las principales recopilaciones de elementos no usados. Configura new_gc_metrics: true para recibir esta métrica.
jvm.gc.minor_collection_count
(gauge)
La tasa de recopilaciones secundarias de elementos no usados. Establece new_gc_metrics: true para recibir esta métrica.
jvm.gc.parnew.time
(gauge)
Tiempo acumulado aproximado de recopilación de basura transcurrido.
Se muestra como milisegundo
jvm.gc.major_collection_time
(gauge)
Fracción de tiempo empleada en la recopilación de basura principal. Configura new_gc_metrics: true para recibir esta métrica.
Se muestra como permille.
jvm.gc.minor_collection_time
(gauge)
Fracción de tiempo empleada en la recopilación de basura menor. Configura new_gc_metrics: true para recibir esta métrica.
Se muestra como permille.

Checks de servicio

jmx.can_connect

Devuelve CRITICAL si el Agent no puede conectarse y recopilar métricas de la instancia de máquina virtual Java (JVM) monitorizada, WARNING si no se recopilan métricas y OK en caso contrario.

Estados: ok, crítico, advertencia

Solucionar problemas

Consulta la lista de FAQ y comandos de resolución de problemas de JMX.

Referencias adicionales