Áú»¢¶Ä²©

6 Descubrimiento de objetos JMX

¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô general

Es posible descubrir todos los atributos JMX MBeans o de MBean o para especificar un patr¨®n para el descubrimiento de estos objetos.

Es obligatorio comprender la diferencia entre un MBean y un atributo MBean para la configuraci¨®n de reglas de descubrimiento. Un MBean es un objeto que puede representar un dispositivo, una aplicaci¨®n o cualquier recurso que deba ser administrado.

Por ejemplo, hay un MBean que representa un servidor web. Sus atributos son recuento de conexiones, recuento de subprocesos, tiempo de espera de solicitud, cach¨¦ de archivos http, uso de memoria, etc. Expresando este pensamiento en un lenguaje humano comprensible podemos decir que una m¨¢quina de caf¨¦ es como un MBean que tiene los siguientes atributos a monitorear: cantidad de agua por taza, consumo medio de agua durante un determinado per¨ªodo de tiempo, n¨²mero de granos de caf¨¦ requeridos por taza, granos de caf¨¦ y tiempo de recarga de agua, etc.

Clave de m¨¦trica

En la configuraci¨®n de la regla de descubrimiento, seleccione Agente JMX en el campo Tipo.

Se admiten dos claves de m¨¦tricas para el descubrimiento de objetos JMX: jmx.discovery[] y jmx.get[]:

Clave de m¨¦trica
Valor de retorno ±Ê²¹°ù¨¢³¾±ð³Ù°ù´Ç²õ Comentario
jmx.discovery[<modo de descubrimiento>,<nombre de objeto>,<descripci¨®n breve ¨²nica>]
Esta m¨¦trica devuelve una matriz JSON con macros LLD que describen objetos MBean o sus atributos. modo de descubrimiento - uno de los siguientes: atributos (recuperar atributos de MBean JMX, predeterminado) o beans (recuperar atributos de JMX MBean MBeans)
nombre de objeto: patr¨®n de nombre de objeto (consulte la ) que identifica los Nombres de MBean que se recuperar¨¢n (vac¨ªos de forma predeterminada, recuperando todos los beans registrados)
descripci¨®n breve ¨²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 JMX MBean
¡ú jmx.discovery[beans] - recuperar todos los JMX MBeans
¡ú 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 las propiedades de MBean que esta m¨¦trica puede devolver en funci¨®n de los caracteres limitados que se admiten en la generaci¨®n de nombres de macros (los caracteres admitidos se pueden describir mediante la siguiente expresi¨®n regular: A-Z0-9_\. ). Entonces, por ejemplo, para descubrir propiedades de MBean con una palabra con guiones o caracteres que no sean ASCII, debe usar jmx.get[].
jmx.get[<modo de descubrimiento>,<nombre de objeto>,<descripci¨®n breve ¨²nica>]
Esta m¨¦trica devuelve una matriz JSON con objetos MBean o sus atributos.

En comparaci¨®n con jmx.discovery[], no define macros LLD.
modo de descubrimiento - uno de los siguientes : atributos (recuperar atributos de JMX MBean, predeterminado) o beans (recuperar JMX MBeans)
nombre de objeto - patr¨®n de nombre de objeto (consulte ) identificando los nombres de MBean que se recuperar¨¢n (vac¨ªo de forma predeterminada, recuperando todos los beans registrados)
descripci¨®n breve ¨²nica: una descripci¨®n ¨²nica que permite varios elementos JMX con el mismo modo de descubrimiento y nombre de objeto en el host (opcional)
Cuando se usa este elemento, es necesario definir macros de descubrimiento personalizadas de bajo nivel, que apunten a valores extra¨ªdos del JSON devuelto usando JSONPath.

Si no se pasan par¨¢metros, se solicita de JMX todos los atributos del MBean. No especificar par¨¢metros para el descubrimiento de JMX o tratar de recibir todos los atributos para un amplio rango como *:type=*,name=* puede conducir a posibles problemas de rendimiento.

Usando jmx.discovery

Esta m¨¦trica devuelve un objeto JSON con macros de descubrimiento de bajo nivel que describen objetos o atributos de MBean. Por ejemplo, en el descubrimiento de atributos de MBean (formateados 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 MBeans (formateado para mayor claridad):

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

Las siguientes macros son compatibles para su uso en el filtro de la regla de descubrimiento y en prototipos de m¨¦tricas, iniciadores y gr¨¢ficos:

Macro ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
Descubrimiento de atributos MBean
{#JMXVALUE} Valor del atributo.
{#JMXTYPE} Tipo de atributo.
{#JMXOBJ} Nombre del objeto.
{#JMXDESC} Nombre del objeto, incluido el nombre del atributo.
{#JMXATTR} Nombre del atributo.
Descubrimiento de MBeans
{#JMXDOMAIN} Dominio MBean. (Nombre reservado de Áú»¢¶Ä²©)
{#JMXOBJ} Nombre del objeto. (Nombre reservado de Áú»¢¶Ä²©)
{#JMX<key property>} Propiedades de MBean (como {#JMXTYPE}, {#JMXNAME}) (consulte las limitaciones a continuaci¨®n).
Limitaciones

Existen algunas limitaciones asociadas con el algoritmo de creaci¨®n de nombres de macro LLD desde los nombres de propiedades de MBean:

  • los nombres de los atributos se cambian a may¨²sculas
  • los nombres de los atributos se ignoran (no se generan macros LLD) si constan de caracteres no admitidos para nombres de macros LLD. Los caracteres soportados se pueden describir mediante la siguiente expresi¨®n regular: A-Z0-9_\.
  • si un atributo se llama "obj" o "domain", ser¨¢ ignorado debido a la superposici¨®n con los valores de las propiedades reservadas de Áú»¢¶Ä²© {#JMXOBJ} y {#JMXDOMAIN}

Considere este ejemplo de jmx.discovery (con modo "beans"). MBean tiene las siguientes propiedades definidas:

name=test
       §ä§Ú§á=Type
       attributes []=1,2,3
       Name=NameOfTheTest
       domAin=some

Como resultado del descubrimiento de JMX, las siguientes macros LLD ser¨¢n generadas:

  • {#JMXDOMAIN} - Áú»¢¶Ä²© interno, que describe el dominio de MBean
  • {#JMXOBJ} - Áú»¢¶Ä²© interno, que describe el objeto MBean
  • {#JMXNAME} - creado a partir de la propiedad "name"

Las propiedades ignoradas son:

  • §ä§Ú§á: su nombre contiene caracteres no admitidos (no ASCII)
  • attributes[] : su nombre contiene caracteres no admitidos ( los corchetes no son compatibles)
  • Name: ya est¨¢ definido (name=testdomAin)
  • domAin: es un nombre reservado de Áú»¢¶Ä²©
Ejemplos

Revisemos dos ejemplos pr¨¢cticos m¨¢s 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 MBean, eche un vistazo a 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 reglas de descubrimiento que recopilan MBeans (sin los atributos) se parece a lo siguiente:

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 que deseemos en 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 de LLD dar¨¢ como resultado algo parecido a esto (las m¨¦tricas son descubiertas por 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 se parece a la siguiente:

lld_rule_mbean_attr.png

La clave utilizada aqu¨ª:

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

Todos los recolectores de basura con un solo atributo de m¨¦trica ser¨¢n descubiertos.

lld_rule_mbean_attr_prototypes.png

En este caso particular se crear¨¢ una m¨¦trica a partir de un prototipo para cada atributo MBean. El principal inconveniente de esta configuraci¨®n es que la creaci¨®n del iniciador a partir de prototipos de iniciadores es imposible ya que solo hay un prototipo de m¨¦trica para todos los atributos. Entonces esta configuraci¨®n se puede usar para la recolecci¨®n de datos, pero no se recomienda para el monitoreo autom¨¢tico.

Usando jmx.get

jmx.get[] es similar a la m¨¦trica jmx.discovery[], pero no convierte las propiedades de los objetos Java en nombres de macros de descubrimiento de bajo nivel y por lo tanto, puede devolver valores sin limitaciones que son asociados con la generaci¨®n de nombres de macros LLD, como guiones o caracteres no ASCII.

Cuando se utiliza jmx.get[] para el descubrimiento, se pueden utilizar macros de descubrimiento de bajo nivel definidas por separado en la pesta?a de macro LLD personalizada de la configuraci¨®n de reglas de descubrimiento, usando JSONPath para apuntar a los valores requeridos.

Descubriendo MBeans

²Ñ¨¦³Ù°ù¾±³¦²¹ de descubrimiento: jmx.get[beans,"com.example:type=*,*"]

Respuesta:

[
           {
               "object": &±ç³Ü´Ç³Ù;³¦´Ç³¾.±ð³æ²¹³¾±è±ô±ð:³Ù²â±è±ð=±á±ð±ô±ô´Ç,»å²¹³Ù²¹-²õ°ù³¦=»å²¹³Ù²¹-²ú²¹²õ±ð,§Ü§Ý§ð§é=§Ù§ß§Ñ§é§Ö§ß§Ú§Ö&±ç³Ü´Ç³Ù;,
               "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

²Ñ¨¦³Ù°ù¾±³¦²¹ de descubrimiento: jmx.get[attributes,"com.example:type=*,*"]

Respuesta:

[
           {
               "object": "com.example:type=*",
               "domain": "com.example",
               "properties": {
                   "type": "Simple"
               }
           },
           {
               "object": &±ç³Ü´Ç³Ù;³¦´Ç³¾.³ú²¹²ú²ú¾±³æ:³Ù²â±è±ð=²â±ð²õ,»å´Ç³¾²¹¾±²Ô=³ú²¹²ú²ú¾±³æ.³¦´Ç³¾,»å²¹³Ù²¹-²õ´Ç³Ü°ù³¦±ð=/»å±ð±¹/°ù²¹²Ô»å,§Ü§Ý§ð§é=§Ù§ß§Ñ§é§Ö§ß§Ú§Ö,´Ç²úÂá=³Ù°ù³Ü±ð&±ç³Ü´Ç³Ù;,
               "domain": "com.zabbix",
               "properties": {
                   "type": "Hello",
                   "domain": "com.example",
                   "data-source": "/dev/rand",
                   &±ç³Ü´Ç³Ù;§Ü§Ý§ð§é&±ç³Ü´Ç³Ù;: &±ç³Ü´Ç³Ù;§Ù§ß§Ñ§é§Ö§ß§Ú§Ö&±ç³Ü´Ç³Ù;,
                   "obj": true
               }
           }
       ]