5 Ontdekking van JMX-objecten

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

In de ontdekkingsregel configuratie, selecteer JMX-agent in het Type veld.

Er worden twee item-sleutels ondersteund voor JMX-objectontdekking - 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 (JMX MBean-attributen ophalen, standaard) of beans (JMX MBeans ophalen)
objectnaam - objectnaam patroon (zie documentatie) die de MBean-namen identificeert die moeten worden opgehaald (standaard leeg, alle geregistreerde beans ophalen)
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 eigenschappen 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 het genereren van de macronaam (ondersteunde tekens kunnen worden beschreven door de volgende reguliere expressie: A-Z0-9_\.). Dus bijvoorbeeld om MBean-eigenschappen te ontdekken met een woord met een streepje of niet-ASCII-tekens, moet je 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.

Vergeleken met jmx.discovery[] definieert het geen LLD-macro's.
ontdekkingsmodus - een van de volgende: attributes (JMX MBean-attributen ophalen, standaard) of beans (JMX MBeans ophalen)
objectnaam - objectnaam patroon (zie documentatie) die de MBean-namen identificeert die moeten worden opgehaald (standaard leeg, alle geregistreerde beans ophalen)
unieke korte beschrijving - een unieke beschrijving die meerdere JMX-items met dezelfde ontdekkingsmodus en objectnaam op de host mogelijk maakt (optioneel)
Bij gebruik van dit item is het nodig om aangepaste laag-niveau ontdekkingsmacro's te 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 opgevraagd. Het niet specificeren van parameters voor JMX-ontdekking of proberen alle attributen op te halen voor een breed scala zoals *:type=*,name=* kan leiden tot mogelijke prestatieproblemen.

Gebruik van jmx.discovery

Dit item retourneert een JSON-object met lage-niveau ontdekkingsmacro's die MBean-objecten of attributen beschrijven. Bijvoorbeeld, bij de ontdekking van MBean-attributen (hergeformatteerd voor duidelijkheid):

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

Bij de ontdekking van MBeans (hergeformatteerd voor duidelijkheid):

[
           {
               "{#JMXDOMAIN}":"java.lang",
               "{#JMXTYPE}":"GarbageCollector",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXNAME}":"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-macro's uit MBean-eigenschappennamen:

  • Attribuutnamen worden omgezet naar hoofdletters.
  • Attribuutnamen worden genegeerd (er worden geen LLD-macro's gegenereerd) als ze bestaan uit niet-ondersteunde tekens voor LLD-macro's. 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).

Houd rekening met dit jmx.discovery (met de modus "beans") voorbeeld. De MBean heeft de volgende eigenschappen gedefinieerd:

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

Als gevolg 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 van de "name" eigenschap

Genegeerde eigenschappen zijn:

  • тип : 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 Zabbix-naam
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, bekijk de volgende tabel:

MBean1 MBean2 MBean3
MBean1Attribute1 MBean2Attribute1 MBean3Attribute1
MBean1Attribute2 MBean2Attribute2 MBean3Attribute2
MBean1Attribute3 MBean2Attribute3 MBean3Attribute3
Voorbeeld 1: Ontdekken van MBeans

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

Voor meer informatie over objecten kun je verwijzen naar de tabel ondersteunde macros, Ontdekking van MBeans sectie.

De configuratie van de ontdekkingsregel voor het verzamelen van MBeans (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 de garbage collectors dezelfde attributenset hebben, kunnen we de gewenste attributen in item-prototypen op de volgende manier 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 wat hier dicht bij komt (items worden ontdekt voor twee Garbage collectors):

discovery_rule_mbean_3.png

Voorbeeld 2: Ontdekken 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 kun je verwijzen naar de tabel ondersteunde macros, Ontdekking van MBean-attributen sectie.

De configuratie van de ontdekkingsregel voor het verzamelen van MBean-attributen 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 item-attribuut worden ontdekt.

lld_rule_mbean_attr_prototypes.png

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

Gebruik van jmx.get

jmx.get[] is vergelijkbaar met het jmx.discovery[] item, maar het zet Java-objecteigenschappen niet om in namen van ontdekkingsmacro's op laag niveau. Hierdoor kan het waarden retourneren zonder de beperkingen die geassocieerd worden met LLD-macronaamgeneratie, zoals streepjes of niet-ASCII-tekens.

Bij gebruik van jmx.get[] voor ontdekking kunnen macronamen voor ontdekking op laag niveau apart gedefinieerd worden in het aangepaste LLD-macro tabblad van de ontdekkingsregelconfiguratie, door gebruik te maken van JSONPath om te verwijzen naar de benodigde waarden.

Ontdekken van MBeans

Ontdekkingsitem: 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"
               }
           }
       ]
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
               }
           }
       ]