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 pozycji
W konfiguracji reguły wykrywania wybierz JMX agent w polu Typ.
Obsługiwane są dwa klucze pozycji do wykrywania obiektów JMX - jmx.discovery[] oraz 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 - jedna z następujących wartości: attributes (pobiera atrybuty JMX MBean, domyślnie) lub beans (pobiera JMX MBeans) nazwa obiektu - wzorzec nazwy obiektu (zobacz documentation) identyfikujący nazwy MBean do pobrania (domyślnie puste, co powoduje pobranie wszystkich zarejestrowanych beanów) unikalny krótki opis - unikalny opis umożliwiający użycie wielu pozycji JMX z tym samym trybem wykrywania i nazwą obiektu na hoście (opcjonalnie) |
Przykłady: → jmx.discovery - pobierz wszystkie atrybuty JMX MBean → jmx.discovery[beans] - pobierz wszystkie JMX MBeans → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - pobierz wszystkie atrybuty garbage collectora → jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - pobierz wszystkie garbage collectory Istnieją pewne ograniczenia dotyczące tego, jakie właściwości MBean ta pozycja może zwracać, ze względu na ograniczony zestaw znaków obsługiwanych przy generowaniu nazw makr (obsługiwane znaki można opisać za pomocą następującego wyrażenia regularnego: A-Z0-9_\.). Dlatego na przykład, aby wykrywać właściwości MBean zawierające słowo z łącznikiem 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 do jmx.discovery[] nie definiuje makr LLD. |
tryb wykrywania - jedna z następujących wartości: attributes (pobiera atrybuty JMX MBean, domyślnie) lub beans (pobiera JMX MBeans) nazwa obiektu - wzorzec nazwy obiektu (zobacz documentation) identyfikujący nazwy MBean do pobrania (domyślnie puste, co powoduje pobranie wszystkich zarejestrowanych beanów) unikalny krótki opis - unikalny opis umożliwiający użycie wielu pozycji JMX z tym samym trybem wykrywania i nazwą obiektu na hoście (opcjonalnie) |
W przypadku użycia tej pozycji należy zdefiniować niestandardowe makra wykrywania niskiego poziomu, wskazujące wartości wyodrębnione ze zwróconego JSON przy użyciu 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.
Więcej informacji o obiektach można znaleźć w tabeli obsługiwanych makr, w sekcji Odkrywanie MBeanów.
Konfiguracja reguły odkrywania zbierającej MBeany (bez atrybutów) wygląda następująco:

Użyty tutaj klucz:
jmx.discovery[beans,"*:type=GarbageCollector,name=*"]
Zostaną odkryte wszystkie garbage collectory bez atrybutów. 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:

Użyte tutaj klucze:
jmx[{#JMXOBJ},CollectionCount]
jmx[{#JMXOBJ},CollectionTime]
jmx[{#JMXOBJ},Valid]
Reguła odkrywania LLD da wynik zbliżony do poniższego (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=*"]
Wszyscy garbage collectory z atrybutem pojedynczej pozycji zostaną wykryci.

W tym konkretnym przypadku dla każdego atrybutu MBean zostanie utworzona pozycja z prototypu. Główną wadą tej konfiguracji jest to, że tworzenie 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ć
zdefiniowane 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
}
}
]