6 JMX objektu atklāšana

Pārskats

Ir iespējams atklāt visus JMX MBean vai MBean atribūtus, vai arī norādīt šablonu šo objektu atklāšanai.

Atklāšanas kārtulas konfigurēšanai ir obligāti jāsaprot atšķirība starp MBean un MBean atribūtiem. MBean ir objekts, kas var attēlot ierīci, lietotni vai jebkuru resursu, kuru nepieciešams pārvaldīt.

Piemēram, ir MBean, kas attēlo tīmekļa serveri. Tā atribūti ir savienojumu skaits, pavedienu skaits, pieprasījuma noildze, HTTP failu kešatmiņa, atmiņas lietojums utt. Izsakot šo domu cilvēkam saprotamā valodā, mēs varam definēt kafijas automātu kā MBean, kam ir šādi uzraugāmie atribūti: ūdens daudzums uz tasi, vidējais ūdens patēriņš noteiktā laika periodā, kafijas pupiņu skaits, kas nepieciešams vienai tasītei, kafijas pupiņu un ūdens papildināšanas laiks utt.

Vienuma atslēga

Atklāšanas kārtulas konfigurācijā laukā Type atlasiet JMX agent.

JMX objektu atklāšanai tiek atbalstītas divas vienumu atslēgas — jmx.discovery[] un jmx.get[]:

Vienuma atslēga
Atgrieztā vērtība Parametri Komentārs
jmx.discovery[<atklāšanas režīms>,<objekta nosaukums>,<unikāls īss apraksts>]
Šis vienums atgriež JSON masīvu ar LLD makro, kas apraksta MBean objektus vai to atribūtus. atklāšanas režīms — viens no šiem: attributes (iegūt JMX MBean atribūtus, pēc noklusējuma) vai beans (iegūt JMX MBeans)
objekta nosaukums — objekta nosaukuma raksts (skatiet dokumentāciju), kas identificē iegūstamo MBean nosaukumus (pēc noklusējuma tukšs, iegūstot visus reģistrētos beanus)
unikāls īss apraksts — unikāls apraksts, kas hostā ļauj izmantot vairākus JMX vienumus ar vienādu atklāšanas režīmu un objekta nosaukumu (neobligāts)
Piemēri:
→ jmx.discovery — iegūt visus JMX MBean atribūtus
→ jmx.discovery[beans] — iegūt visus JMX MBeans
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] — iegūt visus atkritumu savācēja atribūtus
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] — iegūt visus atkritumu savācējus

Pastāv daži ierobežojumi attiecībā uz to, kādas MBean īpašības šis vienums var atgriezt, jo makro nosaukumu ģenerēšanā tiek atbalstīts ierobežots rakstzīmju kopums (atbalstītās rakstzīmes var aprakstīt ar šādu regulāro izteiksmi: A-Z0-9_\.). Tāpēc, piemēram, lai atklātu MBean īpašības ar vārdu, kas satur defisi, vai rakstzīmes ārpus ASCII, ir jāizmanto jmx.get[].
jmx.get[<atklāšanas režīms>,<objekta nosaukums>,<unikāls īss apraksts>]
Šis vienums atgriež JSON masīvu ar MBean objektiem vai to atribūtiem.

Salīdzinājumā ar jmx.discovery[] tas nedefinē LLD makro.
atklāšanas režīms — viens no šiem: attributes (iegūt JMX MBean atribūtus, pēc noklusējuma) vai beans (iegūt JMX MBeans)
objekta nosaukums — objekta nosaukuma raksts (skatiet dokumentāciju), kas identificē iegūstamo MBean nosaukumus (pēc noklusējuma tukšs, iegūstot visus reģistrētos beanus)
unikāls īss apraksts — unikāls apraksts, kas hostā ļauj izmantot vairākus JMX vienumus ar vienādu atklāšanas režīmu un objekta nosaukumu (neobligāts)
Izmantojot šo vienumu, ir jādefinē pielāgoti zema līmeņa atklāšanas makro, kas norāda uz vērtībām, kuras no atgrieztā JSON tiek iegūtas, izmantojot JSONPath.

Ja netiek nodoti parametri, tiek pieprasīti visi JMX MBean atribūti. Parametru nenorādīšana JMX atklāšanai vai mēģinājums saņemt visus atribūtus plašam diapazonam, piemēram, *:type=*,name=*, var radīt iespējamās veiktspējas problēmas.

jmx.discovery izmantošana

Šis vienums atgriež JSON objektu ar zema līmeņa atklāšanas makrosiem, kas apraksta MBean objektus vai atribūtus. Piemēram, MBean atribūtu atklāšanā (pārformatēts skaidrības labad):

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

MBeans atklāšanā (pārformatēts skaidrības labad):

[
    {
        "{#JMXDOMAIN}":"java.lang",
        "{#JMXTYPE}":"GarbageCollector",
        "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
        "{#JMXNAME}":"PS Scavenge"
    }
]
Atbalstītie makrosi

Tālāk norādītie makrosi tiek atbalstīti izmantošanai atklāšanas kārtulas filtrā un vienumu, trigeru un grafiku prototipos:

Macro Description
MBean atribūtu atklāšana
{#JMXVALUE} Atribūta vērtība.
{#JMXTYPE} Atribūta tips.
{#JMXOBJ} Objekta nosaukums.
{#JMXDESC} Objekta nosaukums, ieskaitot atribūta nosaukumu.
{#JMXATTR} Atribūta nosaukums.
MBeans atklāšana
{#JMXDOMAIN} MBean domēns. (Zabbix rezervēts nosaukums)
{#JMXOBJ} Objekta nosaukums. (Zabbix rezervēts nosaukums)
{#JMX<key property>} MBean īpašības (piemēram, {#JMXTYPE}, {#JMXNAME}) (skatiet Ierobežojumi zemāk).
Ierobežojumi

Pastāv daži ierobežojumi, kas saistīti ar algoritmu LLD makro nosaukumu izveidei no MBean īpašību nosaukumiem:

  • atribūtu nosaukumi tiek pārveidoti uz lielajiem burtiem
  • atribūtu nosaukumi tiek ignorēti (LLD makro netiek ģenerēti), ja tie sastāv no LLD makro nosaukumiem neatbalstītām rakstzīmēm. Atbalstītās rakstzīmes var aprakstīt ar šādu regulāro izteiksmi: A-Z0-9_\.
  • ja atribūts tiek saukts par "obj" vai "domain", tas tiks ignorēts, jo pārklājas ar rezervēto Zabbix īpašību {#JMXOBJ} un {#JMXDOMAIN} vērtībām

Lūdzu, apskatiet šo jmx.discovery piemēru (ar "beans" režīmu). MBean ir definētas šādas īpašības (dažas no tām tiks ignorētas; skatiet zemāk):

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

JMX atklāšanas rezultātā tiks ģenerēti šādi LLD makro:

  • {#JMXDOMAIN} - Zabbix iekšējs, apraksta MBean domēnu
  • {#JMXOBJ} - Zabbix iekšējs, apraksta MBean objektu
  • {#JMXNAME} - izveidots no īpašības "name"

Ignorētās īpašības ir:

  • тип : tās nosaukums satur neatbalstītas rakstzīmes (ne-ASCII)
  • attributes[] : tās nosaukums satur neatbalstītas rakstzīmes (kvadrātiekavas netiek atbalstītas)
  • Name : tas jau ir definēts (name=test)
  • domAin : tas ir Zabbix rezervēts nosaukums
Piemēri

Apskatīsim vēl divus praktiskus LLD kārtulas izveides piemērus, izmantojot MBean. Lai labāk saprastu atšķirību starp LLD kārtulu, kas apkopo MBeans, un LLD kārtulu, kas apkopo MBean atribūtus, lūdzu, aplūkojiet šo tabulu:

MBean1 MBean2 MBean3
MBean1Attribute1 MBean2Attribute1 MBean3Attribute1
MBean1Attribute2 MBean2Attribute2 MBean3Attribute2
MBean1Attribute3 MBean2Attribute3 MBean3Attribute3
Piemērs 1: MBean atklāšana

Šis noteikums atgriezīs 3 objektus: kolonnas augšējā rinda: MBean1, MBean2, MBean3.

Plašāku informāciju par objektiem skatiet atbalstīto makrosu tabulā, sadaļā MBean atklāšana.

Atklāšanas noteikuma konfigurācija MBean apkopošanai (bez atribūtiem) izskatās šādi:

lld\_rule\_mbean.png

Šeit izmantotā atslēga:

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

Tiks atklāti visi atkritumu savācēji bez atribūtiem. Tā kā atkritumu savācējiem ir viens un tas pats atribūtu kopums, mēs varam izmantot vēlamos atribūtus vienumu prototipos šādā veidā:

lld\_rule\_mbean\_prototypes.png

Šeit izmantotās atslēgas:

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

LLD atklāšanas noteikuma rezultāts būs aptuveni šāds (vienumi tiek atklāti diviem atkritumu savācējiem):

discovery\_rule\_mbean\_3.png

Piemērs 2: MBean atribūtu atklāšana

Šis noteikums atgriezīs 9 objektus ar šādiem laukiem: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.

Plašāku informāciju par objektiem skatiet atbalstīto makrosu tabulā, sadaļā MBean atribūtu atklāšana.

Atklāšanas noteikuma konfigurācija MBean atribūtu vākšanai izskatās šādi:

lld\_rule\_mbean\_attr.png

Šeit izmantotā atslēga:

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

Tiks atklāti visi atkritumu savācēji ar viena vienuma atribūtu.

lld\_rule\_mbean\_attr\_prototypes.png

Šajā konkrētajā gadījumā no prototipa tiks izveidots vienums katram MBean atribūtam. Šīs konfigurācijas galvenais trūkums ir tas, ka trigeru izveide no trigeru prototipiem nav iespējama, jo visiem atribūtiem ir tikai viens vienuma prototips. Tāpēc šo iestatījumu var izmantot datu vākšanai, taču tas nav ieteicams automātiskai uzraudzībai.

jmx.get izmantošana

jmx.get[] ir līdzīgs jmx.discovery[] vienumam, taču tas nepārvērš Java objektu īpašības par zema līmeņa atklāšanas makro nosaukumiem un tādēļ var atgriezt vērtības bez ierobežojumiem, kas ir saistīti ar LLD makro nosaukumu ģenerēšanu, piemēram, defisēm vai rakstzīmēm, kas nav ASCII.

Izmantojot jmx.get[] atklāšanai, zema līmeņa atklāšanas makro var definēt atsevišķi atklāšanas kārtulas konfigurācijas pielāgotajā LLD makro cilnē, izmantojot JSONPath, lai norādītu uz nepieciešamajām vērtībām.

MBeans atklāšana

Atklāšanas vienums: jmx.get[beans,"com.example:type=*,*"]

Atbilde:

[
    {
        "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"
        }
    }
]
MBean atribūtu atklāšana

Atklāšanas vienums: jmx.get[attributes,"com.example:type=*,*"]

Atbilde:

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