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 makrosiem, 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 šablons (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āti) |
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 makrosu 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 defisētu vārdu vai rakstzīmēm, kas nav 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 makrosus. |
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 šablons (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āti) |
Izmantojot šo vienumu, ir jādefinē pielāgoti zema līmeņa atklāšanas makrosi, 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 MBean atribūti
no JMX. 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:
| 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:

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

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

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