6 Discovery van JMX objects

Overzicht

Het is mogelijk om alle JMX MBeans of MBean-attributen te ontdekken, of om een patroon op te geven voor het ontdekken van deze objecten.

Het is belangrijk om het verschil te begrijpen tussen een MBean en MBean-attributen voor de configuratie van de ontdekkingsregel. Een MBean is een object dat een apparaat, een toepassing of een bron vertegenwoordigt die moet worden beheerd.

Bijvoorbeeld, er is een MBean die een webserver vertegenwoordigt. De attributen zijn het verbindingsaantal, het threadaantal, de aanvraagtime-out, de HTTP-bestandsbuffer, het geheugengebruik, enzovoort. Als we dit in begrijpelijke menselijke taal zouden uitdrukken, kunnen we een koffiemachine definiëren als een MBean met de volgende te bewaken attributen: de hoeveelheid water per kopje, het gemiddelde waterverbruik gedurende een bepaalde periode, het aantal benodigde koffiebonen per kopje, de tijd voor het bijvullen van water en koffiebonen, enzovoort.

Item-sleutel

Bij de configuratie van een ontdekkingsregel selecteert u JMX-agent in het veld Type.

Er worden twee item-sleutels ondersteund voor de ontdekking van JMX-objecten - jmx.discovery[] en jmx.get[]:

Item-sleutel
Retourwaarde Parameters Opmerking
jmx.discovery[<ontdekkingsmodus>,<objectnaam>,<unieke korte beschrijving>]
Dit item retourneert een JSON-array met LLD-macro's die MBean-objecten of hun attributen beschrijven. ontdekkingsmodus - een van de volgende: attributes (haal JMX MBean-attributen op, standaard) of beans (haal JMX MBeans op)
objectnaam - objectnaampatroon (zie documentatie) dat de namen van de MBeans identificeert die moeten worden opgehaald (standaard leeg, haalt alle geregistreerde beans op)
unieke korte beschrijving - een unieke beschrijving die meerdere JMX-items met dezelfde ontdekkingsmodus en objectnaam op de host mogelijk maakt (optioneel)
Voorbeelden:
→ jmx.discovery - haal alle JMX MBean-attributen op
→ jmx.discovery[beans] - haal alle JMX MBeans op
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - haal alle attributen van de garbage collector op
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - haal alle garbage collectors op

Er zijn enkele beperkingen voor welke MBean-eigenschappen dit item kan retourneren op basis van beperkte tekens die worden ondersteund bij de generatie van de macro-naam (ondersteunde tekens kunnen worden beschreven door de volgende reguliere expressie: A-Z0-9_\.). Dus bijvoorbeeld om MBean-eigenschappen te ontdekken met een woord met koppeltekens of niet-ASCII-tekens, moet u jmx.get[] gebruiken.

Ondersteund sinds Zabbix Java-gateway 3.4.
jmx.get[<ontdekkingsmodus>,<objectnaam>,<unieke korte beschrijving>]
Dit item retourneert een JSON-array met MBean-objecten of hun attributen.

In vergelijking met jmx.discovery[] definieert het geen LLD-macro's.
ontdekkingsmodus - een van de volgende: attributes (haal JMX MBean-attributen op, standaard) of beans (haal JMX MBeans op)
objectnaam - objectnaampatroon (zie documentatie) dat de namen van de MBeans identificeert die moeten worden opgehaald (standaard leeg, haalt alle geregistreerde beans op)
unieke korte beschrijving - een unieke beschrijving die meerdere JMX-items met dezelfde ontdekkingsmodus en objectnaam op de host mogelijk maakt (optioneel)
Bij het gebruik van dit item moet u aangepaste LLD-macro's definiëren, die wijzen naar waarden die zijn geëxtraheerd uit de geretourneerde JSON met behulp van JSONPath.

Ondersteund sinds Zabbix Java-gateway 4.4.

Als er geen parameters worden doorgegeven, worden alle MBean-attributen van JMX aangevraagd. Het niet specificeren van parameters voor JMX-ontdekking of proberen alle attributen te ontvangen voor een breed scala zoals *:type=*,name=* kan leiden tot mogelijke prestatieproblemen.

Gebruik van jmx.discovery

Dit item retourneert een JSON-object met LLD-macro's die MBean-objecten of attributen beschrijven. Hier is een voorbeeld van de ontdekking van MBean-attributen (herschikt voor duidelijkheid):

[
           {
               "{#JMXWAARDE}":"0",
               "{#JMXTYPE}":"java.lang.Long",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXBESCHRIJVING}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionCount",
               "{#JMXATTR}":"CollectionCount"
           },
           {
               "{#JMXWAARDE}":"0",
               "{#JMXTYPE}":"java.lang.Long",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXBESCHRIJVING}":"java.lang:type=GarbageCollector,name=PS Scavenge,CollectionTime",
               "{#JMXATTR}":"CollectionTime"
           },
           {
               "{#JMXWAARDE}":"true",
               "{#JMXTYPE}":"java.lang.Boolean",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXBESCHRIJVING}":"java.lang:type=GarbageCollector,name=PS Scavenge,Valid",
               "{#JMXATTR}":"Valid"
           },
           {
               "{#JMXWAARDE}":"PS Scavenge",
               "{#JMXTYPE}":"java.lang.String",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXBESCHRIJVING}":"java.lang:type=GarbageCollector,name=PS Scavenge,Name",
               "{#JMXATTR}":"Name"
           },
           {
               "{#JMXWAARDE}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXTYPE}":"javax.management.ObjectName",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXBESCHRIJVING}":"java.lang:type=GarbageCollector,name=PS Scavenge,ObjectName",
               "{#JMXATTR}":"ObjectName"
           }
       ]

En hier is een voorbeeld van de ontdekking van MBeans (herschikt voor duidelijkheid):

[
           {
               "{#JMXDOEL}":"java.lang",
               "{#JMXTYPE}":"GarbageCollector",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXNAAM}":"PS Scavenge"
           }
       ]
Ondersteunde macros

De volgende macros worden ondersteund voor gebruik in de ontdekkingsregel filter en in de prototypes van items, triggers en grafieken:

Macro Beschrijving
Ontdekking van MBean-attributen
{#JMXVALUE} Attribuutwaarde.
{#JMXTYPE} Attribuuttype.
{#JMXOBJ} Objectnaam.
{#JMXDESC} Objectnaam inclusief attribuutnaam.
{#JMXATTR} Attribuutnaam.
Ontdekking van MBeans
{#JMXDOMAIN} MBean-domein. (Gereserveerde Zabbix-naam)
{#JMXOBJ} Objectnaam. (Gereserveerde Zabbix-naam)
{#JMX<key property>} MBean-eigenschappen (zoals {#JMXTYPE}, {#JMXNAME}) (zie Beperkingen hieronder).
Beperkingen

Er zijn enkele beperkingen verbonden aan het algoritme voor het maken van LLD-macronamen uit MBean-attribuutnamen:

  • Attribuutnamen worden omgezet naar hoofdletters.
  • Attribuutnamen worden genegeerd (er worden geen LLD-macro's gegenereerd) als ze bestaan uit niet-ondersteunde tekens voor LLD-macronamen. Ondersteunde tekens kunnen worden beschreven met de volgende reguliere expressie: A-Z0-9_\.
  • Als een attribuut "obj" of "domain" wordt genoemd, worden ze genegeerd vanwege de overlap met de waarden van de gereserveerde Zabbix-eigenschappen {#JMXOBJ} en {#JMXDOMAIN} (ondersteund sinds Zabbix 3.4.3).

Overweeg dit voorbeeld van jmx.discovery (met de modus "beans"). Een MBean heeft de volgende eigenschappen gedefinieerd:

name=test
       type=Type
       attributes []=1,2,3
       Name=NameOfTheTest
       domAin=some

Als resultaat van JMX-ontdekking worden de volgende LLD-macro's gegenereerd:

  • {#JMXDOMAIN} - Zabbix intern, beschrijft het domein van de MBean
  • {#JMXOBJ} - Zabbix intern, beschrijft het MBean-object
  • {#JMXNAME} - gemaakt vanuit het attribuut "name"

Genegeerde eigenschappen zijn:

  • type: de naam bevat niet-ondersteunde tekens (niet-ASCII)
  • attributes[]: de naam bevat niet-ondersteunde tekens (vierkante haken worden niet ondersteund)
  • Name: het is al gedefinieerd (name=test)
  • domAin: het is een gereserveerde naam in Zabbix
Voorbeelden

Laten we nog twee praktische voorbeelden bekijken van het maken van een LLD-regel met het gebruik van MBean. Om het verschil tussen een LLD-regel die MBeans verzamelt en een LLD-regel die MBean-attributen verzamelt beter te begrijpen, kunt u kijken naar de volgende tabel:

MBean1 MBean2 MBean3
MBean1Attribuut1 MBean2Attribuut1 MBean3Attribuut1
MBean1Attribuut2 MBean2Attribuut2 MBean3Attribuut2
MBean1Attribuut3 MBean2Attribuut3 MBean3Attribuut3
Voorbeeld 1: Ontdekking van MBeans

Deze regel zal 3 objecten retourneren: de bovenste rij van de kolom: MBean1, MBean2, MBean3.

Voor meer informatie over objecten verwijst u naar de tabel met ondersteunde macro's, sectie Ontdekking van MBeans.

De configuratie van de ontdekkingsregel die MBeans verzamelt (zonder de attributen) ziet er als volgt uit:

lld_rule_mbean.png

De gebruikte sleutel hier:

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

Alle garbage collectors zonder attributen worden ontdekt. Omdat garbage collectors dezelfde attribuutset hebben, kunnen we gewenste attributen in item-prototypen als volgt gebruiken:

lld_rule_mbean_prototypes.png

De gebruikte sleutels hier:

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

De LLD-ontdekkingsregel resulteert in iets dat hierop lijkt (items worden ontdekt voor twee garbage collectors):

discovery_rule_mbean_3.png

Voorbeeld 2: Ontdekking van Mbean-attributen

Deze regel zal 9 objecten retourneren met de volgende velden: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1, MBean1Attribute2, MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.

Voor meer informatie over objecten verwijst u naar de tabel met ondersteunde macro's, sectie Ontdekking van MBean-attributen.

De configuratie van de ontdekkingsregel die MBean-attributen verzamelt, ziet er als volgt uit:

lld_rule_mbean_attr.png

De gebruikte sleutel hier:

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

Alle garbage collectors met een enkel attribuutitem worden ontdekt.

lld_rule_mbean_attr_prototypes.png

In dit specifieke geval wordt voor elk MBean-attribuut een item gemaakt vanuit het prototype. Het belangrijkste nadeel van deze configuratie is dat het maken van een trigger vanuit triggerprototypen onmogelijk is, omdat er slechts één itemprototype is voor alle attributen. Deze opstelling kan dus worden gebruikt voor gegevensverzameling, maar wordt niet aanbevolen voor automatische monitoring.

jmx.get[] is vergelijkbaar met het item jmx.discovery[], maar het zet Java-objecteigenschappen niet om in LLD-macro's (low-level discovery) voorbeeldnamen en kan daarom waarden retourneren zonder de beperkingen die gepaard gaan met de generatie van LLD-macronamen, zoals streepjes of niet-ASCII-tekens.

Bij gebruik van jmx.get[] voor ontdekking kunnen LLD-macro's voor lage niveaus afzonderlijk worden gedefinieerd in het aangepaste LLD-macro tabblad van de configuratie van de ontdekkingsregel, met gebruik van JSONPath om te wijzen naar de vereiste waarden.

Ontdekkingselement: jmx.get[beans,"com.example:type=*,*"]

Reactie:

[
           {
               "object": "com.example:type=Hello,data-src=data-base,key=value",
               "domain": "com.example",
               "properties": {
                   "data-src": "data-base",
                   "key": "value",
                   "type": "Hello"
               }
           },
           {
               "object": "com.example:type=Atomic",
               "domain": "com.example",
               "properties": {
                   "type": "Atomic"
               }
           }
       ]

In dit voorbeeld wordt een ontdekking uitgevoerd met behulp van het jmx.get[] item. Het retourneert een JSON-respons met gedetecteerde MBeans en hun eigenschappen. Elke MBean heeft een objectnaam, domein en een lijst van eigenschappen. De LLD-macro's kunnen vervolgens worden ingesteld om de gewenste waarden uit deze respons te halen met behulp van JSONPath.

MBean-attributen ontdekken

Ontdekkingsitem: jmx.get[attributes,"com.example:type=*,*"]

Reactie:

[
           {
               "object": "com.example:type=*",
               "domain": "com.example",
               "properties": {
                   "type": "Eenvoudig"
               }
           },
           {
               "object": "com.zabbix:type=yes,domain=zabbix.com,data-source=/dev/rand,key=value,obj=true",
               "domain": "com.zabbix",
               "properties": {
                   "type": "Hello",
                   "domain": "com.example",
                   "data-source": "/dev/rand",
                   "key": "value",
                   "obj": true
               }
           }
       ]