6 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 item
En la configuración de la regla de descubrimiento, seleccione JMX agent en el campo Tipo.
Se admiten dos claves de item para el descubrimiento de objetos JMX: jmx.discovery[] y jmx.get[]:
| Clave de item | |||
|---|---|---|---|
| Valor devuelto | Parámetros | Comentario | |
| jmx.discovery[<modo de descubrimiento>,<nombre de objeto>,<descripción corta única>] | |||
| Este item devuelve un arreglo JSON con macros LLD que describen objetos MBean o sus atributos. | modo de descubrimiento: uno de los siguientes: attributes (recuperar atributos de MBean JMX, predeterminado) o beans (recuperar MBeans JMX) nombre de objeto: patrón de nombre de objeto (consulte la documentación) que identifica los nombres de MBean que se van a recuperar (vacío de forma predeterminada, recupera todos los beans registrados) descripción corta única: una descripción única que permite múltiples items JMX con el mismo modo de descubrimiento y nombre de objeto en el host (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 este item, debido al conjunto limitado de caracteres admitidos en la generación de nombres de macros (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 palabras separadas por guion o caracteres no ASCII, debe usar jmx.get[]. |
|
| jmx.get[<modo de descubrimiento>,<nombre de objeto>,<descripción corta única>] | |||
| Este item devuelve un arreglo 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, predeterminado) o beans (recuperar MBeans JMX) nombre de objeto: patrón de nombre de objeto (consulte la documentación) que identifica los nombres de MBean que se van a recuperar (vacío de forma predeterminada, recupera todos los beans registrados) descripción corta única: una descripción única que permite múltiples items JMX con el mismo modo de descubrimiento y nombre de objeto en el host (opcional) |
Al usar este item, es necesario definir macros personalizadas de descubrimiento de bajo nivel, que apunten a valores extraídos del JSON devuelto mediante JSONPath. | |
Si no se pasan parámetros, se solicitan todos los atributos MBean
de 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
Este elemento devuelve un objeto JSON con macros de descubrimiento 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
Las siguientes macros son compatibles para su uso en el filtro de la regla de descubrimiento y en los prototipos de items, triggers 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 del MBean. (Nombre reservado de Zabbix) |
| {#JMXOBJ} | Nombre del objeto. (Nombre reservado de Zabbix) |
| {#JMX<key property>} | Propiedades del MBean (como {#JMXTYPE}, {#JMXNAME}) (consulte Limitaciones más abajo). |
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 Zabbix {#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} - Zabbix interno, que describe el dominio de MBean
- {#JMXOBJ} - Zabbix 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 Zabbix
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: Descubrimiento de 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 compatibles, sección Descubrimiento de MBeans.
La configuración de la regla de descubrimiento que recopila MBeans (sin los atributos) tiene el siguiente aspecto:

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 item de la siguiente manera:

Las claves utilizadas aquí:
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},CollectionTime]
jmx[{#JMXOBJ},Valid]
La regla de descubrimiento LLD dará como resultado algo parecido a esto (se descubren items para dos recolectores de basura):

Ejemplo 2: Descubrimiento de atributos MBean
Esta regla devolverá 9 objetos con los siguientes campos: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
Para más información sobre los objetos, consulte la tabla de macros soportadas, sección Descubrimiento de atributos MBean.
La configuración de la regla de descubrimiento que recopila atributos MBean es la siguiente:

La clave utilizada aquí:
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
Se descubrirán todos los recolectores de basura con un único atributo de item.

En este caso concreto, se creará un item a partir del prototipo para cada atributo MBean. La principal desventaja de esta configuración es que la creación de triggers a partir de prototipos de trigger es imposible, ya que solo hay un prototipo de item para todos los atributos. Por lo tanto, esta configuración puede utilizarse 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 item 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 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 descubrimiento de bajo nivel 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
}
}
]