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:

Š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ā:

Š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):

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:

Šeit izmantotā atslēga:
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
Tiks atklāti visi atkritumu savācēji ar viena vienuma atribūtu.

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