6 Descoberta d'objectes JMX

Vista general

És possible descobrir tots els atributs MBeans o MBeans JMX o especificar una plantilla per a la descoberta d'aquests objectes.

Entendre la diferència entre els atributs Mbean i Mbean és essencial per configurar les regles de descoberta. Un MBean és un objecte que pot representar un dispositiu, una aplicació o qualsevol recurs que s'hagi de gestionar.

Per exemple, hi ha un Mbean que representa un servidor web. Els seus atributs són: nombre de connexions, nombre de fils, temps d'espera de la petició, memòria cau de fitxers http, ús de memòria, etc. Expressant aquest pensament en un llenguatge humà complet, podem definir una màquina de cafè com un Mbean els atributs del qual a controlar són: quantitat d'aigua per tassa, consum mitjà d'aigua durant un període determinat, nombre de grans de cafè necessaris per tassa, grans de cafè i recàrrega d'aigua, hora, etc.

Clau d'element

A la configuració de la regla de descoberta, trieu agent JMX al camp Tipus.

S'admeten dues claus d'element per a la descoberta d'objectes JMX: jmx.discovery[] i jmx.get[]:

Clau d'element
Valor de retorn Paràmetres Comentari
jmx.discovery[<mode de descoberta>,<nom de l'objecte>,<descripció breu única>]
Aquest element retorna una matriu JSON amb macros LLD que descriuen objectes MBean o els seus atributs. mode de descoberta - un dels següents: atributs (obtinguent els atributs MBean JMX, per defecte) o beans (obtinguent JMX). MBeans)
nom de l'objecte - patró de nom d'objecte (veieu la documentació) que identifica el Noms de MBean per recuperar (buit per defecte, recuperant tots els beans registrats)
descripció curta única - una descripció única que permet diversos elements JMX amb el mateix mode de descoberta i el mateix nom d'objecte a l'equip (opcional)
Exemples:
→ jmx.discovery - recupera tots els atributs JMX MBean
→ jmx.discovery[beans] - recupera tots els MBeans JMX
→ jmx.discovery[atributs,"*:type=GarbageCollector,nom =*"] - recupera tots els atributs del col·lector d'escombraries
→ jmx.discovery[beans," *:type=GarbageCollector,name=*"] - recupera tots els col·lectors d'escombraries

Hi ha algunes limitacions pel que fa a les propietats de MBean que aquest element pot retornar en funció dels caràcters limitats admesos en la generació de noms de macro (els caràcters admesos es poden descriure amb la següent expressió regular: A-Z0-9_\.). Així, per exemple, per descobrir propietats de MBean amb paraules amb guionet o caràcters no ASCII, hauríeu d'emprar jmx.get[].
jmx.get[<mode de descoberta>,<nom de l'objecte>,<descripció curta única>]
Aquest element retorna una matriu JSON amb objectes MBean o els seus atributs.

En comparació amb jmx.discovery[] no defineix macros LLD.
mode de descoberta - un dels següents: atributs (obté els atributs JMX MBean, per defecte) o beans (obté els MBeans JMX)
nom de l'objecte - patró de nom d'objecte (veieu documentació) identificant els noms MBean que cal recuperar (buit per defecte, recuperant tots els beans registrats)
descripció curta única - una descripció única que permet diversos elements JMX amb el mateix mode de descoberta i el mateix nom d'objecte a l'equip (opcional)
Quan s'empra aquest element, cal definir macros de descoberta de baix nivell personalitzades, que apunten als valors extrets de JSON retornat mitjançant JSONPath.

Si no es passa cap paràmetre, es demanen tots els atributs JMX MBean. No especificar paràmetres per a la descoberta de JMX o intentar rebre tots els atributs d'una àmplia gamma com ara *:type=*,name=* pot provocar problemes de rendiment potencials.

Ús de jmx.discovery

Aquest element retorna un objecte JSON amb macros de descoberta de baix nivell que descriuen objectes o atributs MBean. Per exemple, a la descoberta d'atributs MBean (reformatat per a més claredat):

[
           {
               "{#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"
           }
       ]

A la descoberta de MBeans (reformatat per a més claredat):

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

S'admeten les macros següents per emprar-les al filtre de la regla de descoberta i als prototips d'elements, triggers i gràfics:

Macro Descripció
Es són descobrint els atributs MBean
{#JMXVALUE} Valor de l'atribut.
{#JMXTYPE} Tipus d'atribut.
{#JMXOBJ} Nom de l'objecte.
{#JMXDESC} Nom de l'objecte inclòs el nom de l'atribut.
{#JMXATTR} Nom de l'atribut.
Descobrint MBeans
{#JMXDOMAIN} Domini MBean. (Nom reservat Zabbix)
{#JMXOBJ} Nom de l'objecte. (Nom reservat Zabbix)
{#JMX<propietat de clau>} Propietats MBean (com {#JMXTYPE}, {#JMXNAME}) (veieu les limitacions més avall).
Limitacions

Hi ha algunes limitacions associades a l'algoritme per crear noms de macro LLD a partir de noms de propietat MBean:

  • els noms dels atributs són en majúscula
  • els noms d'atributs s'ignoren (no es genera cap macro LLD) si contenen caràcters no compatibles amb els noms de macro LLD. Els caràcters admesos es poden descriure amb l'expressió regular següent: A-Z0-9_\.
  • si un atribut s'anomena "obj" o "domini", s'ignorarà a causa de la superposició amb els valors de les propietats reservades de Zabbix {#JMXOBJ} i {#JMXDOMAIN}

Si us plau, tingueu en compte aquest exemple jmx.discovery (amb mode "beans"). MBean té definides les propietats següents (algunes de les quals s'ignoraran; veieu més avall):

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

Com a resultat de la descoberta de JMX, es generaran les macros LLD següents:

  • {#JMXDOMAIN} - Zabbix intern, que descriu el domini MBean
  • {#JMXOBJ} - Zabbix intern, que descriu l'objecte MBean
  • {#JMXNAME} - creat a partir de la propietat "name"

Les propietats ignorades són:

  • тип: el seu nom conté caràcters no admesos (no ASCII)
  • atrributes[]: el seu nom conté caràcters no admesos (no s'admeten els claudàtors)
  • Name: ja és definit (name=test)
  • domAin: és un nom reservat de Zabbix
Exemples

Passem per dos exemples més pràctics de creació de regles LLD amb l'ús de Mbean. Per entendre millor la diferència entre una regla LLD que recull Mbeans i una regla LLD que recull atributs Mbean, consulteu la taula següent:

MBean1 MBean2 MBean3
MBean1Attribute1 MBean2Attribute1 MBean3Attribute1
MBean1Attribute2 MBean2Attribute2 MBean3Attribute2
MBean1Attribute3 MBean2Attribute3 MBean3Attribute3
Exemple 1 : Descobrir els MBeans

Aquesta regla retornarà 3 objectes: la filera superior de la columna: MBean1, MBean2, MBean3.

Per obtindre més informació sobre els objectes, consulteu la taula de macros compatibles, secció Descoberta de MBeans.

La configuració de la regla de descoberta que recull els MBeans (sense els atributs) té aquest aspecte:

lld_rule_mbean.png

La clau emprada aquí:

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

Es descobriran tots els recol·lectors d'escombraries sense atributs. Com que els col·lectors d'escombraries tenen el mateix conjunt d'atributs, podem emprar els atributs desitjats als prototips d'elements de la següent manera:

lld_rule_mbean_prototypes.png

Claus emprades aquí:

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

La regla de descoberta d'LLD donarà lloc a alguna cosa semblant a això (es descobreixen elements per a dos col·lectors d'escombraries):

discovery_rule_mbean_3.png

Exemple 2 : Descoberta dels atributs Mbean

Aquesta regla retornarà 9 objectes amb els següents camps: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1, MBean1Attribute2, MBean2Attribute2, Mbean3Attribute2, MBean1Attribute3, MBean2Attribute3, Mbean3Attribute3.

Per obtindre més informació sobre els objectes, consulteu la taula de macros compatibles, secció Descoberta d'atributs MBean.

La configuració de la regla de descoberta que recull els atributs Mbean té aquest aspecte:

lld_rule_mbean_attr.png

La clau emprada aquí:

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

Es descobriran tots els recol·lectors d'escombraries amb un únic atribut d'element.

lld_rule_mbean_attr_prototypes.png

En aquest cas particular, es crearà un element a partir del prototip per a cada atribut MBean. El principal desavantatge d'aquesta configuració és que la creació de triggers a partir de prototips de triggers no és possible perquè només hi ha un prototip d'element per a tots els atributs. Per tant, aquesta configuració es pot emprar per a la recollida de dades, però no es recomana per al monitoratge automàtic.

Ús de jmx.get

jmx.get[] és similar a l'element jmx.discovery[], però no transforma les propietats d'objectes Java en noms de macro de descoberta de baix nivell i, per tant, pot retornar valors sense limitacions que s'associen amb la generació de noms de macro LLD com ara guions o caràcters no ASCII.

Quan s'emprajmx.get[] per a la descoberta, les macros de descoberta de baix nivell es poden establir per separat a la pestanya personalitzada Macros LLD de la configuració de la regla de descoberta, emprant JSONPath per apuntar als valors requerits.

Descoberta dels MBeans

Element de descoberta: jmx.get[beans,"com.example:type=*,*"]

Resposta:

[
           {
               "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"
               }
           }
       ]
Descoberta dels atributs MBean

Element de descoberta: jmx.get[attributes,"com.example:type=*,*"]

Resposta:

[
           {
               "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
               }
           }
       ]