6 Wykrywanie obiektów JMX
Przegląd
Możliwe jest wykrywanie wszystkich JMX MBeanów lub atrybutów MBeanów albo określenie wzorca do wykrywania tych obiektów.
Dla konfiguracji reguły wykrywania konieczne jest zrozumienie różnicy między MBeanem a atrybutami MBeana. MBean jest obiektem, który może reprezentować urządzenie, aplikację lub dowolny zasób, który wymaga zarządzania.
Na przykład istnieje MBean reprezentujący serwer WWW. Jego atrybutami są liczba połączeń, liczba wątków, limit czasu żądania, pamięć podręczna plików HTTP, użycie pamięci itp. Wyrażając tę myśl w języku bardziej zrozumiałym dla człowieka, możemy zdefiniować ekspres do kawy jako MBean, który ma następujące atrybuty do monitorowania: ilość wody na filiżankę, średnie zużycie wody w określonym czasie, liczba ziaren kawy wymagana na filiżankę, czas uzupełniania ziaren kawy i wody itp.
Klucz pozycja
W konfiguracji reguły wykrywania wybierz JMX agent w polu Type.
Obsługiwane są dwa klucze pozycji dla wykrywania obiektów JMX - jmx.discovery[] i jmx.get[]:
| Klucz pozycji | |||
|---|---|---|---|
| Wartość zwracana | Parametry | Komentarz | |
| jmx.discovery[<tryb wykrywania>,<nazwa obiektu>,<unikalny krótki opis>] | |||
| Ta pozycja zwraca tablicę JSON z makrami LLD opisującymi obiekty MBean lub ich atrybuty. | tryb wykrywania - jeden z następujących: attributes (pobiera atrybuty JMX MBean, domyślnie) lub beans (pobiera JMX MBeans) nazwa obiektu - wzorzec nazwy obiektu (zobacz dokumentację) identyfikujący nazwy MBean do pobrania (domyślnie puste, pobierane są wszystkie zarejestrowane bean-y) unikalny krótki opis - unikalny opis, który umożliwia wiele pozycji JMX z tym samym trybem wykrywania i nazwą obiektu na hoście (opcjonalnie) |
Przykłady: → jmx.discovery - pobiera wszystkie atrybuty JMX MBean → jmx.discovery[beans] - pobiera wszystkie JMX MBeans → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - pobiera wszystkie atrybuty garbage collectora → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - pobiera wszystkie garbage collectory Istnieją pewne ograniczenia dotyczące właściwości MBean, które ta pozycja może zwrócić, wynikające z ograniczonego zestawu znaków obsługiwanych podczas generowania nazw makr (obsługiwane znaki można opisać następującym wyrażeniem regularnym: A-Z0-9_\."). Dlatego na przykład, aby wykrywać właściwości MBean zawierające łącznik lub znaki spoza ASCII, należy użyćjmx.get[]`. |
|
| jmx.get[<tryb wykrywania>,<nazwa obiektu>,<unikalny krótki opis>] | |||
| Ta pozycja zwraca tablicę JSON z obiektami MBean lub ich atrybutami. W porównaniu z jmx.discovery[] nie definiuje makr LLD. |
tryb wykrywania - jeden z następujących: attributes (pobiera atrybuty JMX MBean, domyślnie) lub beans (pobiera JMX MBeans) nazwa obiektu - wzorzec nazwy obiektu (zobacz dokumentację) identyfikujący nazwy MBean do pobrania (domyślnie puste, pobierane są wszystkie zarejestrowane bean-y) unikalny krótki opis - unikalny opis, który umożliwia wiele pozycji JMX z tym samym trybem wykrywania i nazwą obiektu na hoście (opcjonalnie) |
Używając tej pozycji, należy zdefiniować niestandardowe makra wykrywania niskopoziomowego, wskazujące na wartości wyodrębnione ze zwróconego JSON za pomocą JSONPath. | |
Jeśli nie zostaną przekazane żadne parametry, żądane są wszystkie atrybuty MBean
z JMX. Niepodanie parametrów dla wykrywania JMX lub
próba pobrania wszystkich atrybutów dla szerokiego zakresu, takiego jak *:type=*,name=*
może prowadzić do potencjalnych problemów z wydajnością.
Użycie jmx.discovery
Ta pozycja zwraca obiekt JSON z makrami wykrywania niskiego poziomu opisującymi obiekty MBean lub atrybuty. Na przykład przy wykrywaniu atrybutów MBean (przeformatowano dla przejrzystości):
[
{
"{#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"
}
]
Przy wykrywaniu MBeanów (przeformatowano dla przejrzystości):
[
{
"{#JMXDOMAIN}":"java.lang",
"{#JMXTYPE}":"GarbageCollector",
"{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
"{#JMXNAME}":"PS Scavenge"
}
]
Obsługiwane makra
Następujące makra są obsługiwane do użycia w filtrze reguły wykrywania oraz w prototypach pozycji, wyzwalaczy i wykresów:
| Makro | Opis |
|---|---|
| Wykrywanie atrybutów MBean | |
| {#JMXVALUE} | Wartość atrybutu. |
| {#JMXTYPE} | Typ atrybutu. |
| {#JMXOBJ} | Nazwa obiektu. |
| {#JMXDESC} | Nazwa obiektu wraz z nazwą atrybutu. |
| {#JMXATTR} | Nazwa atrybutu. |
| Wykrywanie MBeanów | |
| {#JMXDOMAIN} | Domena MBean. (Nazwa zastrzeżona przez Zabbix) |
| {#JMXOBJ} | Nazwa obiektu. (Nazwa zastrzeżona przez Zabbix) |
| {#JMX<key property>} | Właściwości MBean (takie jak {#JMXTYPE}, {#JMXNAME}) (zobacz Ograniczenia poniżej). |
Ograniczenia
Istnieją pewne ograniczenia związane z algorytmem tworzenia nazw makr LLD z nazw właściwości MBean:
- nazwy atrybutów są zmieniane na wielkie litery
- nazwy atrybutów są ignorowane (nie są generowane żadne makra LLD), jeśli
składają się z znaków nieobsługiwanych w nazwach makr LLD. Obsługiwane
znaki można opisać za pomocą następującego wyrażenia regularnego:
A-Z0-9_\. - jeśli atrybut ma nazwę "obj" lub "domain", zostanie zignorowany z powodu nakładania się z wartościami zastrzeżonych właściwości Zabbix {#JMXOBJ} i {#JMXDOMAIN}
Proszę rozważyć ten przykład jmx.discovery (w trybie "beans"). MBean ma zdefiniowane następujące właściwości (niektóre z nich zostaną zignorowane; patrz niżej):
name=test
тип=Type
attributes []=1,2,3
Name=NameOfTheTest
domAin=some
W wyniku wykrywania JMX zostaną wygenerowane następujące makra LLD:
- {#JMXDOMAIN} - wewnętrzne Zabbix, opisujące domenę MBean
- {#JMXOBJ} - wewnętrzne Zabbix, opisujące obiekt MBean
- {#JMXNAME} - utworzone z właściwości "name"
Ignorowane właściwości to:
- тип : jego nazwa zawiera nieobsługiwane znaki (spoza ASCII)
- attributes[] : jego nazwa zawiera nieobsługiwane znaki (nawiasy kwadratowe nie są obsługiwane)
- Name : jest już zdefiniowana (name=test)
- domAin : jest to nazwa zastrzeżona przez Zabbix
Przykłady
Przyjrzyjmy się jeszcze dwóm praktycznym przykładom tworzenia reguły LLD z wykorzystaniem MBean. Aby lepiej zrozumieć różnicę między regułą LLD zbierającą MBeans a regułą LLD zbierającą atrybuty MBean, prosimy spojrzeć na poniższą tabelę:
| MBean1 | MBean2 | MBean3 |
| MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
| MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
| MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
Przykład 1: Odkrywanie MBeanów
Ta reguła zwróci 3 obiekty: górny wiersz kolumny: MBean1, MBean2, MBean3.
Aby uzyskać więcej informacji o obiektach, zobacz tabelę obsługiwanych makr w sekcji Odkrywanie MBeanów.
Konfiguracja reguły odkrywania zbierającej MBeany (bez atrybutów) wygląda następująco:

Klucz użyty tutaj:
jmx.discovery[beans,"*:type=GarbageCollector,name=*"]
Wszystkie garbage collectory bez atrybutów zostaną odkryte. Ponieważ garbage collectory mają ten sam zestaw atrybutów, możemy użyć żądanych atrybutów w prototypach pozycji w następujący sposób:

Klucze użyte tutaj:
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},CollectionTime]
jmx[{#JMXOBJ},Valid]
Reguła odkrywania LLD da w rezultacie coś zbliżonego do tego (pozycje są odkrywane dla dwóch garbage collectorów):

Przykład 2: Odkrywanie atrybutów MBean
Ta reguła zwróci 9 obiektów z następującymi polami: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1,MBean1Attribute2,MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
Aby uzyskać więcej informacji o obiektach, zobacz tabelę supported macros, sekcja Discovery of MBean attributes.
Konfiguracja reguły wykrywania zbierającej atrybuty MBean wygląda następująco:

Użyty tutaj klucz:
jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]
Wszystkie garbage collectory z atrybutem pojedynczej pozycji zostaną wykryte.

W tym konkretnym przypadku dla każdego atrybutu MBean zostanie utworzona pozycja z prototypu. Główną wadą tej konfiguracji jest to, że utworzenie wyzwalaczy z prototypów wyzwalaczy jest niemożliwe, ponieważ istnieje tylko jeden prototyp pozycji dla wszystkich atrybutów. Dlatego ta konfiguracja może być używana do zbierania danych, ale nie jest zalecana do automatycznego monitorowania.
Używanie jmx.get
jmx.get[] jest podobna do pozycji jmx.discovery[], ale nie
zamienia właściwości obiektów Java na nazwy makr wykrywania niskiego poziomu i
dlatego może zwracać wartości bez ograniczeń, które są
związane z generowaniem nazw makr LLD, takich jak myślniki lub znaki
spoza ASCII.
Podczas używania jmx.get[] do wykrywania makra wykrywania niskiego poziomu mogą być
definiowane oddzielnie na niestandardowej karcie makr
LLD w konfiguracji
reguły wykrywania, z użyciem JSONPath do wskazania wymaganych
wartości.
Odkrywanie MBeans
Pozycja wykrywania: jmx.get[beans,"com.example:type=*,*"]
Odpowiedź:
[
{
"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"
}
}
]
Odkrywanie atrybutów MBean
Pozycja odkrywania: jmx.get[attributes,"com.example:type=*,*"]
Odpowiedź:
[
{
"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
}
}
]