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 noteikuma konfigurācijā laukā Type atlasiet JMX agent.

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

Vienuma atslēga
Atgrieztā vērtība Parametri Komentārs
jmx.discovery[<discovery mode>,<object name>,<unique short description>]
Šis vienums atgriež JSON masīvu ar LLD makro, kas apraksta MBean objektus vai to atribūtus. discovery mode - viens no šiem: attributes (iegūst JMX MBean atribūtus, noklusējums) vai beans (iegūst JMX MBeans)
object name - objekta nosaukuma veidne (skat. dokumentāciju), kas identificē iegūstamos MBean nosaukumus (pēc noklusējuma tukšs, iegūstot visus reģistrētos beanus)
unique short description - unikāls apraksts, kas ļauj vienam hostam izmantot vairākus JMX vienumus ar vienu un to pašu discovery mode un object name (neobligāts)
Piemēri:
→ jmx.discovery - iegūst visus JMX MBean atribūtus
→ jmx.discovery[beans] - iegūst visus JMX MBeans
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - iegūst visus garbage collector atribūtus
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - iegūst visus garbage collector

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 defisi saturošu vārdu vai ne-ASCII rakstzīmēm, jāizmanto jmx.get[].
jmx.get[<discovery mode>,<object name>,<unique short description>]
Šis vienums atgriež JSON masīvu ar MBean objektiem vai to atribūtiem.

Salīdzinājumā ar jmx.discovery[] tas nedefinē LLD makro.
discovery mode - viens no šiem: attributes (iegūst JMX MBean atribūtus, noklusējums) vai beans (iegūst JMX MBeans)
object name - objekta nosaukuma veidne (skat. dokumentāciju), kas identificē iegūstamos MBean nosaukumus (pēc noklusējuma tukšs, iegūstot visus reģistrētos beanus)
unique short description - unikāls apraksts, kas ļauj vienam hostam izmantot vairākus JMX vienumus ar vienu un to pašu discovery mode un object name (neobligāts)
Izmantojot šo vienumu, ir jādefinē pielāgoti zemā līmeņa atklāšanas makro, kas norāda uz vērtībām, kuras no atgrieztā JSON tiek iegūtas, izmantojot JSONPath.

Ja parametri netiek nodoti, no JMX tiek pieprasīti visi MBean atribūti. Nenorādot parametrus JMX atklāšanai vai mēģinot saņemt visus atribūtus plašam diapazonam, piemēram, *:type=*,name=*, var rasties 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:

Makross Apraksts
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šējo rindu: MBean1, MBean2, MBean3.

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

Atklāšanas noteikuma konfigurācija MBean vākš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 vajadzīgos atribūtus vienumu prototipos šādi:

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.

Lai iegūtu vairāk informācijas par objektiem, skatiet atbalstīto makrosu tabulu sadaļā MBean atribūtu atklāšana.

MBean atribūtu apkopojošā atklāšanas noteikuma konfigurācija 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 apkopoš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ārveido Java objektu īpašības par zema līmeņa atklāšanas makro nosaukumiem un tāpēc var atgriezt vērtības bez ierobežojumiem, kas ir saistīti ar LLD makro nosaukumu ģenerēšanu, piemēram, defisēm vai ne-ASCII rakstzīmēm.

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 macro 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
        }
    }
]