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:

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