Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

6 Descubrimiento de objetos JMX

Descripción general

Es posible descubrir todos los MBeans de JMX o los atributos de MBean, o especificar un patrón para la descubrimiento de estos objetos.

Es obligatorio comprender la diferencia entre un MBean y los atributos de MBean para la configuración de la regla de descubrimiento. Un MBean es un objeto que puede representar un dispositivo, una aplicación o cualquier recurso que necesite ser gestionado.

Por ejemplo, existe un MBean que representa un servidor web. Sus atributos son el número de conexiones, el número de hilos, el tiempo de espera de la solicitud, la caché de archivos http, el uso de memoria, etc. Expresando este pensamiento en un lenguaje comprensible para los humanos, podemos definir una máquina de café como un MBean que tiene los siguientes atributos a monitorizar: cantidad de agua por taza, consumo medio de agua durante un determinado período de tiempo, número de granos de café necesarios por taza, tiempo de recarga de granos de café y agua, etc.

Clave de métrica

En la configuración de la regla de descubrimiento, seleccione JMX agent en el campo Tipo.

Se admiten dos claves de métrica para el descubrimiento de objetos JMX: jmx.discovery[] y jmx.get[]:

Clave de métrica
Valor devuelto Parámetros Comentario
jmx.discovery[<modo de descubrimiento>,<nombre del objeto>,<descripción corta única>]
Esta métrica devuelve un array JSON con macros LLD que describen objetos MBean o sus atributos. modo de descubrimiento: uno de los siguientes: attributes (recuperar atributos de MBean JMX, por defecto) o beans (recuperar MBeans JMX)
nombre del objeto: patrón de nombre de objeto (ver documentación) que identifica los nombres de MBean a recuperar (vacío por defecto, recuperando todos los beans registrados)
descripción corta única: una descripción única que permite múltiples métricas JMX con el mismo modo de descubrimiento y nombre de objeto en el equipo (opcional)
Ejemplos:
→ jmx.discovery - recuperar todos los atributos de MBean JMX
→ jmx.discovery[beans] - recuperar todos los MBeans JMX
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - recuperar todos los atributos del recolector de basura
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - recuperar todos los recolectores de basura

Existen algunas limitaciones sobre qué propiedades de MBean puede devolver esta métrica, basadas en los caracteres limitados que se admiten en la generación de nombres de macro (los caracteres admitidos pueden describirse mediante la siguiente expresión regular: A-Z0-9_\.). Por lo tanto, por ejemplo, para descubrir propiedades de MBean con una palabra con guion o caracteres no ASCII, debe usar jmx.get[].
jmx.get[<modo de descubrimiento>,<nombre del objeto>,<descripción corta única>]
Esta métrica devuelve un array JSON con objetos MBean o sus atributos.

En comparación con jmx.discovery[], no define macros LLD.
modo de descubrimiento: uno de los siguientes: attributes (recuperar atributos de MBean JMX, por defecto) o beans (recuperar MBeans JMX)
nombre del objeto: patrón de nombre de objeto (ver documentación) que identifica los nombres de MBean a recuperar (vacío por defecto, recuperando todos los beans registrados)
descripción corta única: una descripción única que permite múltiples métricas JMX con el mismo modo de descubrimiento y nombre de objeto en el equipo (opcional)
Al utilizar esta métrica, es necesario definir macros de descubrimiento de bajo nivel personalizadas, apuntando a valores extraídos del JSON devuelto usando JSONPath.

Si no se pasan parámetros, se solicitan todos los atributos de MBean desde JMX. No especificar parámetros para el descubrimiento JMX o intentar recibir todos los atributos para un rango amplio como *:type=*,name=* puede provocar posibles problemas de rendimiento.

Uso de jmx.discovery

Esta métrica devuelve un objeto JSON con macros de bajo nivel que describen objetos o atributos MBean. Por ejemplo, en el descubrimiento de atributos MBean (reformateado para mayor claridad):

[
           {
               "{#JMXVALUE}":"0",
               "{#JMXTYPE}":"java.lang.Long",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionCount",
               "{#JMXATTR}":"CollectionCount"
           },
           {
               "{#JMXVALUE}":"0",
               "{#JMXTYPE}":"java.lang.Long",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
               "{#JMXATTR}":"CollectionTime"
           },
           {
               "{#JMXVALUE}":"true",
               "{#JMXTYPE}":"java.lang.Boolean",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Valid",
               "{#JMXATTR}":"Valid"
           },
           {
               "{#JMXVALUE}":"PS Scavenge",
               "{#JMXTYPE}":"java.lang.String",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Name",
               "{#JMXATTR}":"Name"
           },
           {
               "{#JMXVALUE}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXTYPE}":"javax.management.ObjectName",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,ObjectName",
               "{#JMXATTR}":"ObjectName"
           }
       ]

En el descubrimiento de MBeans (reformateado para mayor claridad):

[
           {
               "{#JMXDOMAIN}":"java.lang",
               "{#JMXTYPE}":"GarbageCollector",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXNAME}":"PS Scavenge"
           }
       ]
Macros soportadas

Se admiten las siguientes macros para su uso en la regla de descubrimiento y prototipos de métricas, disparadores y gráficos:

Macro Descripción
Descubrimiento de atributos MBean
{#JMXVALUE} Valor del atributo.
{#JMXTYPE} Tipo de atributo.
{#JMXOBJ} Nombre del objeto.
{#JMXDESC} Nombre del objeto incluyendo el nombre del atributo.
{#JMXATTR} Nombre del atributo.
Descubrimiento de MBeans
{#JMXDOMAIN} Dominio MBean. (Nombre reservado por Zabbix)
{#JMXOBJ} Nombre del objeto. (Nombre reservado por Zabbix)
{#JMX<key property>} Propiedades MBean (como {#JMXTYPE}, {#JMXNAME}) (ver Limitaciones más abajo).
Limitaciones

Existen algunas limitaciones asociadas al algoritmo de creación de nombres de macros LLD a partir de nombres de propiedades MBean:

  • los nombres de los atributos se convierten a mayúsculas
  • los nombres de los atributos se ignoran (no se generan macros LLD) si consisten en caracteres no soportados para nombres de macros LLD. Los caracteres soportados pueden describirse mediante la siguiente expresión regular: A-Z0-9_\.
  • si un atributo se llama "obj" o "domain" serán ignorados debido a la superposición con los valores de las propiedades reservadas de Zabbix {#JMXOBJ} y {#JMXDOMAIN}

Considere este ejemplo de jmx.discovery (con modo "beans"). El MBean tiene las siguientes propiedades definidas (algunas de las cuales serán ignoradas; ver más abajo):

name=test
       тип=Type
       attributes []=1,2,3
       Name=NameOfTheTest
       domAin=some

Como resultado del descubrimiento JMX, se generarán las siguientes macros LLD:

  • {#JMXDOMAIN} - Interna de Zabbix, describe el dominio del MBean
  • {#JMXOBJ} - Interna de Zabbix, describe el objeto MBean
  • {#JMXNAME} - creada a partir de la propiedad "name"

Las propiedades ignoradas son:

  • тип : su nombre contiene caracteres no soportados (no-ASCII)
  • attributes[] : su nombre contiene caracteres no soportados (los corchetes no están soportados)
  • Name : ya está definida (name=test)
  • domAin : es un nombre reservado de Zabbix
Ejemplos

Revisemos dos ejemplos más prácticos de creación de una regla LLD con el uso de MBean. Para comprender mejor la diferencia entre una regla LLD que recopila MBeans y una regla LLD que recopila atributos de MBean, por favor observe la siguiente tabla:

MBean1 MBean2 MBean3
MBean1Attribute1 MBean2Attribute1 MBean3Attribute1
MBean1Attribute2 MBean2Attribute2 MBean3Attribute2
MBean1Attribute3 MBean2Attribute3 MBean3Attribute3
Ejemplo 1: Descubriendo MBeans

Esta regla devolverá 3 objetos: la fila superior de la columna: MBean1, MBean2, MBean3.

Para obtener más información sobre los objetos, consulte la tabla de macros soportadas, sección Descubrimiento de MBeans.

La configuración de la regla de descubrimiento que recopila MBeans (sin los atributos) se ve de la siguiente manera:

lld_rule_mbean.png

La clave utilizada aquí:

jmx.discovery[beans,"*:type=GarbageCollector,name=*"]

Se descubrirán todos los recolectores de basura sin atributos. Como los recolectores de basura tienen el mismo conjunto de atributos, podemos usar los atributos deseados en los prototipos de métricas de la siguiente manera:

lld_rule_mbean_prototypes.png

Las claves utilizadas aquí:

jmx[{#JMXOBJ},CollectionCount] 
       jmx[{#JMXOBJ},CollectionTime] 
       jmx[{#JMXOBJ},Valid] 

La regla de descubrimiento LLD dará como resultado algo similar a esto (las métricas se descubren para dos recolectores de basura):

discovery_rule_mbean_3.png

Ejemplo 2: Descubriendo atributos de MBean

Esta regla devolverá 9 objetos con los siguientes campos: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1, MBean1Attribute2, MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.

Para obtener más información sobre los objetos, consulte la tabla de macros soportadas, sección Descubrimiento de atributos de MBean.

La configuración de la regla de descubrimiento que recopila atributos de MBean es la siguiente:

lld_rule_mbean_attr.png

La clave utilizada aquí:

jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]

Se descubrirán todos los recolectores de basura con un único atributo de métrica.

lld_rule_mbean_attr_prototypes.png

En este caso particular, se creará una métrica a partir de la plantilla para cada atributo de MBean. El principal inconveniente de esta configuración es que la creación de disparadores a partir de plantillas de disparadores es imposible, ya que solo hay una plantilla de métrica para todos los atributos. Por lo tanto, esta configuración puede usarse para la recopilación de datos, pero no se recomienda para la monitorización automática.

Uso de jmx.get

jmx.get[] es similar al elemento jmx.discovery[], pero no convierte las propiedades de objetos Java en nombres de macros de bajo nivel de descubrimiento y, por lo tanto, puede devolver valores sin las limitaciones asociadas con la generación de nombres de macros LLD, como guiones o caracteres no ASCII.

Al usar jmx.get[] para el descubrimiento, las macros de bajo nivel de descubrimiento pueden definirse por separado en la pestaña personalizada de macro LLD de la configuración de la regla de descubrimiento, utilizando JSONPath para señalar los valores requeridos.

Descubriendo MBeans

Métrica de descubrimiento: jmx.get[beans,"com.example:type=*,*"]

Respuesta:

[
           {
               "object": "com.example:type=Hello,data-src=data-base,ключ=значение",
               "domain": "com.example",
               "properties": {
                   "data-src": "data-base",
                   "ключ": "значение",
                   "type": "Hello"
               }
           },
           {
               "object": "com.example:type=Atomic",
               "domain": "com.example",
               "properties": {
                   "type": "Atomic"
               }
           }
       ]
Descubriendo atributos de MBean

Métrica de descubrimiento: jmx.get[attributes,"com.example:type=*,*"]

Respuesta:

[
           {
               "object": "com.example:type=*",
               "domain": "com.example",
               "properties": {
                   "type": "Simple"
               }
           },
           {
               "object": "com.zabbix:type=yes,domain=zabbix.com,data-source=/dev/rand,ключ=значение,obj=true",
               "domain": "com.zabbix",
               "properties": {
                   "type": "Hello",
                   "domain": "com.example",
                   "data-source": "/dev/rand",
                   "ключ": "значение",
                   "obj": true
               }
           }
       ]