6 Erkennung von JMX-Objekten
Übersicht
Es ist möglich, alle JMX-MBeans oder MBean-Attribute zu entdecken oder ein Muster für die Erkennung dieser Objekte anzugeben.
Für die Konfiguration der Discovery-Regel ist es zwingend erforderlich, den Unterschied zwischen einem MBean und MBean-Attributen zu verstehen. Ein MBean ist ein Objekt, das ein Gerät, eine Anwendung oder eine beliebige Ressource repräsentieren kann, die verwaltet werden muss.
Zum Beispiel gibt es ein MBean, das einen Webserver repräsentiert. Seine Attribute sind die Anzahl der Verbindungen, die Anzahl der Threads, das Request-Timeout, der HTTP-Datei-Cache, die Speicherauslastung usw. In einer für Menschen verständlichen Sprache ausgedrückt, können wir eine Kaffeemaschine als ein MBean definieren, das die folgenden zu überwachenden Attribute hat: Wassermenge pro Tasse, durchschnittlicher Wasserverbrauch über einen bestimmten Zeitraum, Anzahl der Kaffeebohnen pro Tasse, Nachfüllzeit für Kaffeebohnen und Wasser usw.
Datenpunktschlüssel
Wählen Sie in der Konfiguration der Discovery-Regel im Feld Typ JMX agent aus.
Für die Erkennung von JMX-Objekten werden zwei Datenpunktschlüssel unterstützt: jmx.discovery[] und jmx.get[]:
| Datenpunktschlüssel | |||
|---|---|---|---|
| Rückgabewert | Parameter | Kommentar | |
| jmx.discovery[<discovery mode>,<object name>,<unique short description>] | |||
| Dieser Datenpunkt gibt ein JSON-Array mit LLD-Makros zurück, die MBean-Objekte oder deren Attribute beschreiben. | discovery mode - einer der folgenden Werte: attributes (JMX-MBean-Attribute abrufen, Standard) oder beans (JMX-MBeans abrufen) object name - Objektname-Muster (siehe documentation), das die abzurufenden MBean-Namen identifiziert (standardmäßig leer, wodurch alle registrierten Beans abgerufen werden) unique short description - eine eindeutige Beschreibung, die mehrere JMX-Datenpunkte mit demselben Discovery-Modus und Objektnamen auf dem Host ermöglicht (optional) |
Beispiele: → jmx.discovery - alle JMX-MBean-Attribute abrufen → jmx.discovery[beans] - alle JMX-MBeans abrufen → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - alle Attribute der Garbage Collector abrufen → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - alle Garbage Collector abrufen Es gibt einige Einschränkungen hinsichtlich der MBean-Eigenschaften, die dieser Datenpunkt zurückgeben kann, da bei der Generierung von Makronamen nur eine begrenzte Anzahl von Zeichen unterstützt wird (unterstützte Zeichen können durch den folgenden regulären Ausdruck beschrieben werden: A-Z0-9_\.). Um beispielsweise MBean-Eigenschaften mit einem Wort mit Bindestrich oder Nicht-ASCII-Zeichen zu erkennen, müssen Sie jmx.get[] verwenden. |
|
| jmx.get[<discovery mode>,<object name>,<unique short description>] | |||
| Dieser Datenpunkt gibt ein JSON-Array mit MBean-Objekten oder deren Attributen zurück. Im Vergleich zu jmx.discovery[] definiert er keine LLD-Makros. |
discovery mode - einer der folgenden Werte: attributes (JMX-MBean-Attribute abrufen, Standard) oder beans (JMX-MBeans abrufen) object name - Objektname-Muster (siehe documentation), das die abzurufenden MBean-Namen identifiziert (standardmäßig leer, wodurch alle registrierten Beans abgerufen werden) unique short description - eine eindeutige Beschreibung, die mehrere JMX-Datenpunkte mit demselben Discovery-Modus und Objektnamen auf dem Host ermöglicht (optional) |
Bei Verwendung dieses Datenpunkts müssen benutzerdefinierte Low-Level-Discovery-Makros definiert werden, die auf Werte verweisen, die mit JSONPath aus dem zurückgegebenen JSON extrahiert werden. | |
Wenn keine Parameter übergeben werden, werden alle MBean-Attribute
aus JMX angefordert. Wenn für die JMX-Erkennung keine Parameter angegeben werden oder
versucht wird, alle Attribute für einen weiten Bereich wie *:type=*,name=*
abzurufen, kann dies zu potenziellen Leistungsproblemen führen.
Verwendung von jmx.discovery
Dieser Datenpunkt gibt ein JSON-Objekt mit Low-Level-Discovery-Makros zurück, die MBean-Objekte oder -Attribute beschreiben. Zum Beispiel bei der Discovery von MBean-Attributen (zur besseren Übersichtlichkeit neu formatiert):
[
{
"{#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"
}
]
Bei der Discovery von MBeans (zur besseren Übersichtlichkeit neu formatiert):
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"GarbageCollector",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"PS Scavenge"
}
]
Unterstützte Makros
Die folgenden Makros werden zur Verwendung im Filter der Discovery-Regel und in Prototypen von Datenpunkten, Auslösern und Diagrammen unterstützt:
| Makro | Beschreibung |
|---|---|
| Discovery von MBean-Attributen | |
| {#JMXVALUE} | Attributwert. |
| {#JMXTYPE} | Attributtyp. |
| {#JMXOBJ} | Objektname. |
| {#JMXDESC} | Objektname einschließlich Attributname. |
| {#JMXATTR} | Attributname. |
| Discovery von MBeans | |
| {#JMXDOMAIN} | MBean-Domain. (Von Zabbix reservierter Name) |
| {#JMXOBJ} | Objektname. (Von Zabbix reservierter Name) |
| {#JMX<key property>} | MBean-Eigenschaften (wie {#JMXTYPE}, {#JMXNAME}) (siehe Einschränkungen unten). |
Einschränkungen
Es gibt einige Einschränkungen im Zusammenhang mit dem Algorithmus zur Erstellung von LLD-Makronamen aus MBean-Eigenschaftsnamen:
- Attributnamen werden in Großbuchstaben umgewandelt
- Attributnamen werden ignoriert (es werden keine LLD-Makros erzeugt), wenn sie aus für LLD-Makronamen nicht unterstützten Zeichen bestehen. Unterstützte Zeichen können durch den folgenden regulären Ausdruck beschrieben werden:
A-Z0-9_\. - wenn ein Attribut „obj“ oder „domain“ heißt, wird es ignoriert, da es sich mit den Werten der reservierten Zabbix-Eigenschaften {#JMXOBJ} und {#JMXDOMAIN} überschneidet
Bitte beachten Sie dieses Beispiel für jmx.discovery (mit dem Modus „beans“). Für das MBean sind die folgenden Eigenschaften definiert (einige davon werden ignoriert; siehe unten):
name=test
тип=Type
attributes []=1,2,3
Name=NameOfTheTest
domAin=some
Als Ergebnis der JMX-Erkennung werden die folgenden LLD-Makros erzeugt:
- {#JMXDOMAIN} - Zabbix-intern, beschreibt die Domain des MBean
- {#JMXOBJ} - Zabbix-intern, beschreibt das MBean-Objekt
- {#JMXNAME} - aus der Eigenschaft „name“ erstellt
Ignorierte Eigenschaften sind:
- тип : sein Name enthält nicht unterstützte Zeichen (nicht ASCII)
- attributes[] : sein Name enthält nicht unterstützte Zeichen (eckige Klammern werden nicht unterstützt)
- Name : ist bereits definiert (name=test)
- domAin : ist ein von Zabbix reservierter Name
Beispiele
Sehen wir uns zwei weitere praktische Beispiele für die Erstellung einer LLD-Regel unter Verwendung von MBean an. Um den Unterschied zwischen einer LLD-Regel, die MBeans erfasst, und einer LLD-Regel, die MBean-Attribute erfasst, besser zu verstehen, werfen Sie bitte einen Blick auf die folgende Tabelle:
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
Beispiel 1: Erkennung von MBeans
Diese Regel gibt 3 Objekte zurück: die oberste Zeile der Spalte: MBean1, MBean2, MBean3.
Weitere Informationen zu Objekten finden Sie in der Tabelle unterstützte Makros, Abschnitt Erkennung von MBeans.
Die Konfiguration der Discovery-Regel zum Sammeln von MBeans (ohne die Attribute) sieht wie folgt aus:

Der hier verwendete Schlüssel:
jmx.discovery[beans,"*:type=GarbageCollector,name=*"]
Alle Garbage Collectors ohne Attribute werden erkannt. Da Garbage Collectors denselben Attributsatz haben, können wir die gewünschten Attribute in Datenpunkt-Prototypen auf folgende Weise verwenden:

Die hier verwendeten Schlüssel:
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},CollectionTime]
jmx[{#JMXOBJ},Valid]
Die LLD-Discovery-Regel führt zu einem Ergebnis, das in etwa so aussieht (Datenpunkte werden für zwei Garbage Collectors erkannt):

Beispiel 2: Erkennung von MBean-Attributen
Diese Regel gibt 9 Objekte mit den folgenden Feldern zurück: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
Weitere Informationen zu Objekten finden Sie in der Tabelle unterstützte Makros, Abschnitt Erkennung von MBean-Attributen.
Die Konfiguration der Discovery-Regel zum Sammeln von MBean-Attributen sieht wie folgt aus:

Der hier verwendete Schlüssel:
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
Alle Garbage Collectors mit einem einzelnen Datenpunkt-Attribut werden erkannt.

In diesem speziellen Fall wird für jedes MBean-Attribut ein Datenpunkt aus dem Prototyp erstellt. Der Hauptnachteil dieser Konfiguration besteht darin, dass die Erstellung von Auslösern aus Auslöser-Prototypen nicht möglich ist, da es nur einen Datenpunkt-Prototyp für alle Attribute gibt. Daher kann diese Einrichtung zur Datenerfassung verwendet werden, wird jedoch nicht für die automatische Überwachung empfohlen.
Verwendung von jmx.get
jmx.get[] ist ähnlich wie der Datenpunkt jmx.discovery[], wandelt jedoch Java-Objekteigenschaften nicht in Makronamen für Low-Level-Discovery um und kann daher Werte ohne Einschränkungen zurückgeben, die mit der Generierung von LLD-Makronamen verbunden sind, wie z. B. Bindestriche oder Nicht-ASCII-Zeichen.
Bei der Verwendung von jmx.get[] für Discovery können Low-Level-Discovery-Makros separat im benutzerdefinierten Tab LLD-Makro der Discovery-Regelkonfiguration definiert werden, wobei JSONPath verwendet wird, um auf die erforderlichen Werte zu verweisen.
Erkennen von MBeans
Discovery-Datenpunkt: jmx.get[beans,"com.example:type=*,*"]
Antwort:
[
{
"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"
}
}
]
Erkennen von MBean-Attributen
Discovery-Datenpunkt: jmx.get[attributes,"com.example:type=*,*"]
Antwort:
[
{
"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
}
}
]