6 Scoperta di oggetti JMX

Panoramica

È possibile individuare tutti gli MBean JMX o gli attributi MBean, oppure specificare un pattern per l'individuazione di questi oggetti.

È obbligatorio comprendere la differenza tra un MBean e gli attributi MBean per la configurazione della regola di individuazione. Un MBean è un oggetto che può rappresentare un dispositivo, un'applicazione o qualsiasi risorsa che deve essere gestita.

Ad esempio, esiste un MBean che rappresenta un server web. I suoi attributi sono il numero di connessioni, il numero di thread, il timeout delle richieste, la cache dei file HTTP, l'utilizzo della memoria, ecc. Esprimendo questo concetto in un linguaggio comprensibile alle persone, possiamo definire una macchina da caffè come un MBean che ha i seguenti attributi da monitorare: quantità d'acqua per tazza, consumo medio di acqua in un determinato periodo di tempo, numero di chicchi di caffè necessari per tazza, tempo di ricarica dei chicchi di caffè e dell'acqua, ecc.

Chiave item

Nella configurazione della regola di discovery, selezionare JMX agent nel campo Tipo.

Per la discovery degli oggetti JMX sono supportate due chiavi item: jmx.discovery[] e jmx.get[]:

Chiave item
Valore restituito Parametri Commento
jmx.discovery[<modalità di discovery>,<nome oggetto>,<breve descrizione univoca>]
Questo item restituisce un array JSON con macro LLD che descrivono gli oggetti MBean o i loro attributi. modalità di discovery - una delle seguenti: attributes (recupera gli attributi JMX MBean, predefinito) oppure beans (recupera gli MBean JMX)
nome oggetto - pattern del nome oggetto (vedere la documentazione) che identifica i nomi MBean da recuperare (vuoto per impostazione predefinita, recupera tutti i bean registrati)
breve descrizione univoca - una descrizione univoca che consente più item JMX con la stessa modalità di discovery e nome oggetto sull'host (opzionale)
Esempi:
→ jmx.discovery - recupera tutti gli attributi JMX MBean
→ jmx.discovery[beans] - recupera tutti gli MBean JMX
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - recupera tutti gli attributi del garbage collector
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - recupera tutti i garbage collector

Esistono alcune limitazioni relative alle proprietà MBean che questo item può restituire, a causa del numero limitato di caratteri supportati nella generazione dei nomi delle macro (i caratteri supportati possono essere descritti dalla seguente espressione regolare: A-Z0-9_\.). Quindi, ad esempio, per individuare proprietà MBean con parole contenenti trattini o caratteri non ASCII, è necessario usare jmx.get[].
jmx.get[<modalità di discovery>,<nome oggetto>,<breve descrizione univoca>]
Questo item restituisce un array JSON con oggetti MBean o i loro attributi.

Rispetto a jmx.discovery[], non definisce macro LLD.
modalità di discovery - una delle seguenti: attributes (recupera gli attributi JMX MBean, predefinito) oppure beans (recupera gli MBean JMX)
nome oggetto - pattern del nome oggetto (vedere la documentazione) che identifica i nomi MBean da recuperare (vuoto per impostazione predefinita, recupera tutti i bean registrati)
breve descrizione univoca - una descrizione univoca che consente più item JMX con la stessa modalità di discovery e nome oggetto sull'host (opzionale)
Quando si utilizza questo item, è necessario definire macro di low-level discovery personalizzate, che puntino ai valori estratti dal JSON restituito usando JSONPath.

Se non viene passato alcun parametro, vengono richiesti tutti gli attributi MBean da JMX. Non specificare parametri per la discovery JMX oppure tentare di ricevere tutti gli attributi per un intervallo ampio come *:type=*,name=* può causare potenziali problemi di prestazioni.

Utilizzo di jmx.discovery

Questo item restituisce un oggetto JSON con macro di low-level discovery che descrivono oggetti o attributi MBean. Ad esempio, nel rilevamento degli attributi MBean (riformattato per maggiore chiarezza):

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

Nel rilevamento degli MBean (riformattato per maggiore chiarezza):

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

Le seguenti macro sono supportate per l'uso nel filtro della regola di discovery e nei prototipi di item, trigger e grafici:

Macro Descrizione
Discovery degli attributi MBean
{#JMXVALUE} Valore dell'attributo.
{#JMXTYPE} Tipo di attributo.
{#JMXOBJ} Nome dell'oggetto.
{#JMXDESC} Nome dell'oggetto incluso il nome dell'attributo.
{#JMXATTR} Nome dell'attributo.
Discovery degli MBean
{#JMXDOMAIN} Dominio MBean. (nome riservato di Zabbix)
{#JMXOBJ} Nome dell'oggetto. (nome riservato di Zabbix)
{#JMX<key property>} Proprietà MBean (come {#JMXTYPE}, {#JMXNAME}) (vedere Limitazioni sotto).
Limitazioni

Esistono alcune limitazioni associate all'algoritmo di creazione dei nomi delle macro LLD a partire dai nomi delle proprietà MBean:

  • i nomi degli attributi vengono convertiti in maiuscolo
  • i nomi degli attributi vengono ignorati (non vengono generate macro LLD) se sono costituiti da caratteri non supportati per i nomi delle macro LLD. I caratteri supportati possono essere descritti dalla seguente espressione regolare: A-Z0-9_\.
  • se un attributo si chiama "obj" o "domain", verrà ignorato a causa della sovrapposizione con i valori delle proprietà Zabbix riservate {#JMXOBJ} e {#JMXDOMAIN}

Si consideri questo esempio di jmx.discovery (con modalità "beans"). MBean ha definite le seguenti proprietà (alcune delle quali verranno ignorate; vedi sotto):

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

Come risultato della discovery JMX, verranno generate le seguenti macro LLD:

  • {#JMXDOMAIN} - interna di Zabbix, descrive il dominio di MBean
  • {#JMXOBJ} - interna di Zabbix, descrive l'oggetto MBean
  • {#JMXNAME} - creata dalla proprietà "name"

Le proprietà ignorate sono:

  • тип : il suo nome contiene caratteri non supportati (non ASCII)
  • attributes[] : il suo nome contiene caratteri non supportati (le parentesi quadre non sono supportate)
  • Name : è già definita (name=test)
  • domAin : è un nome riservato di Zabbix
Esempi

Esaminiamo altri due esempi pratici di creazione di una regola LLD con l'uso di MBean. Per comprendere meglio la differenza tra una regola LLD che raccoglie MBean e una regola LLD che raccoglie attributi MBean, consultare la tabella seguente:

MBean1 MBean2 MBean3
MBean1Attribute1 MBean2Attribute1 MBean3Attribute1
MBean1Attribute2 MBean2Attribute2 MBean3Attribute2
MBean1Attribute3 MBean2Attribute3 MBean3Attribute3
Esempio 1: individuazione degli MBean

Questa regola restituirà 3 oggetti: la riga superiore della colonna: MBean1, MBean2, MBean3.

Per ulteriori informazioni sugli oggetti, fare riferimento alla tabella delle macro supportate, sezione Individuazione degli MBean.

La configurazione della regola di discovery che raccoglie gli MBean (senza gli attributi) appare come segue:

lld\_rule\_mbean.png

La chiave utilizzata qui:

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

Verranno individuati tutti i garbage collector senza attributi. Poiché i garbage collector hanno lo stesso insieme di attributi, possiamo usare gli attributi desiderati nei prototipi di item nel modo seguente:

lld\_rule\_mbean\_prototypes.png

Le chiavi utilizzate qui:

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

La regola di discovery LLD produrrà un risultato simile a questo (gli item vengono individuati per due garbage collector):

discovery\_rule\_mbean\_3.png

Esempio 2: individuazione degli attributi MBean

Questa regola restituirà 9 oggetti con i seguenti campi: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.

Per ulteriori informazioni sugli oggetti, fare riferimento alla tabella delle macro supportate, sezione Individuazione degli attributi MBean.

La configurazione della regola di individuazione che raccoglie gli attributi MBean appare come segue:

lld\_rule\_mbean\_attr.png

La chiave utilizzata qui:

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

Verranno individuati tutti i garbage collector con un singolo attributo item.

lld\_rule\_mbean\_attr\_prototypes.png

In questo caso particolare, verrà creato un item dal prototipo per ogni attributo MBean. Il principale svantaggio di questa configurazione è che la creazione dei trigger dai prototipi di trigger è impossibile, poiché esiste un solo prototipo di item per tutti gli attributi. Pertanto, questa configurazione può essere utilizzata per la raccolta dei dati, ma non è consigliata per il monitoraggio automatico.

Utilizzo di jmx.get

jmx.get[] è simile all'item jmx.discovery[], ma non trasforma le proprietà degli oggetti Java in nomi di macro di low-level discovery e pertanto può restituire valori senza le limitazioni che sono associate alla generazione dei nomi delle macro LLD, come trattini o caratteri non ASCII.

Quando si utilizza jmx.get[] per il discovery, le macro di low-level discovery possono essere definite separatamente nella scheda personalizzata macro LLD della configurazione della regola di discovery, utilizzando JSONPath per puntare ai valori richiesti.

Individuazione degli MBean

Item di discovery: jmx.get[beans,"com.example:type=*,*"]

Risposta:

[
    {
        "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"
        }
    }
]
Individuazione degli attributi MBean

Item di discovery: jmx.get[attributes,"com.example:type=*,*"]

Risposta:

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