5 Descubrimiento de objetos JMX

Descripción 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 artículo

En descubrimiento regla configuración, seleccione Agente JMX en el campo Tipo.

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

Clave de artículo
Valor de retorno Parámetros Comentario
jmx.discovery[<modo de descubrimiento>,<nombre de objeto>,<descripción breve única>]
Este elemento 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 documentación) que identifica el 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 elementos JMX con el mismo modo de descubrimiento y nombre de objeto en el host (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 este elemento 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[].

Compatible desde Zabbix Java gateway 3.4.
jmx.get[<modo de descubrimiento>,<nombre de objeto>,<descripción breve única>]
Este elemento 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 documentación) 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.
< br>Soportado desde Zabbix Java gateway 4.4.

::: nota importante Si no se pasan parámetros, todos los atributos del MBean Se solicitan de JMX. No especificar parámetros para el descubrimiento de JMX o intentando recibir todos los atributos para un amplio rango como *:type=*,name=* puede conducir a posibles problemas de rendimiento. :::

Usando jmx.discovery

Este elemento devuelve un objeto JSON con macros de descubrimiento de bajo nivel Describir 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}":"CuentaColección"
           },
           {
               "{#JMXVALUE}":"0",
               "{#JMXTYPE}":"java.lang.Long",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
               "{#JMXATTR}":"Tiempo de colección"
           },
           {
               "{#JMXVALUE}":"verdadero",
               "{#JMXTYPE}":"java.lang.Boolean",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Válido",
               "{#JMXATTR}":"Válido"
           },
           {
               "{#JMXVALUE}":"Buscar PS",
               "{#JMXTYPE}":"java.lang.String",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXDESC}":"java.lang:type=GarbageCollector,name=PS Scavenge,Nombre",
               "{#JMXATTR}":"Nombre"
           },
           {
               "{#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}":"Nombre del objeto"
           }
       ]

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

[
           {
               "{#JMXDOMAIN}":"java.lang",
               "{#JMXTYPE}":"Recolector de basura",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXNAME}":"Buscar PS"
           }
       ]
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 Descripción
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 Zabbix)
{#JMXOBJ} Nombre del objeto. (Nombre reservado de Zabbix)
{#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 LLD. nombres de macro de 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. Soportado Los caracteres se pueden describir mediante la siguiente expresión regular: A-Z0-9_\.
  • si un atributo se llama "obj" o "dominio", será ignorado debido a la superposición con los valores del Zabbix reservado propiedades {#JMXOBJ} y {#JMXDOMAIN} (compatibles desde Zabbix 3.4.3.)

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

nombre=prueba
       tip=Tipo
       atributos []=1,2,3
       Nombre=NombreDeLaPrueba
       dominio=algunos

Como resultado del descubrimiento de JMX, las siguientes macros LLD serán generado:

  • {#JMXDOMAIN} - Zabbix interno, que describe el dominio de MBean
  • {#JMXOBJ} - Zabbix interno, que describe el objeto MBean
  • {#JMXNAME} - creado a partir de la propiedad "nombre"

Las propiedades ignoradas son:

  • тип: su nombre contiene caracteres no admitidos (no ASCII)
  • atributos[] : su nombre contiene caracteres no admitidos (cuadrado los corchetes no son compatibles)
  • Nombre: ya está definido (nombre=prueba)
  • dominio: es un nombre reservado de Zabbix
Ejemplos

Repasemos dos ejemplos prácticos más de creación de reglas LLD con el uso de MBean. Para comprender la diferencia entre una recopilación de reglas LLD MBeans y una regla LLD que recopila mejor los atributos de MBean, por favor eche un vistazo a la siguiente tabla:

MBean1 MBean2 MBean3
MBean1Atributo1 MBean2Atributo1 MBean3Atributo1
MBean1Atributo2 MBean2Atributo2 MBean3Atributo2
MBean1Atributo3 MBean2Atributo3 MBean3Atributo3
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 compatible macros tabla, sección Descubrimiento de MBeans.

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,"*:tipo=GarbageCollector,nombre=*"]

Se descubrirán todos los recolectores de basura sin atributos. Como Los recolectores de basura tienen el mismo conjunto de atributos, podemos usar los que deseemos. atributos en prototipos de artículos de la siguiente manera:

lld_rule_mbean_prototypes.png

Las claves utilizadas aquí:

jmx[{#JMXOBJ},CollectionCount] 
       jmx[{#JMXOBJ},Tiempodecolección] 
       jmx[{#JMXOBJ},Válido] 

La regla de descubrimiento de LLD dará como resultado algo parecido a esto (los elementos son descubierto 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: MBean1Atributo1, MBean2Atributo1, MBean3Atributo1, MBean1Atributo2, MBean2Atributo2, MBean3Atributo2, MBean1Atributo3, MBean2Atributo3, MBean3Atributo3.

Para obtener más información sobre los objetos, consulte compatible macros tabla, 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[atributos,"*:tipo=GarbageCollector,nombre=*"]

Todos los recolectores de basura con un solo atributo de elemento serán descubierto.

lld_rule_mbean_attr_prototypes.png

En este caso particular se creará un artículo a partir de un prototipo para cada Atributo MBean. El principal inconveniente de esta configuración es que el disparador La creación a partir de prototipos de disparadores es imposible ya que solo hay un elemento. prototipo para todos los atributos. Entonces esta configuración se puede usar para datos. recolección, 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

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
               }
           }
       ]