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 odkrywania wybierz JMX agent w polu Typ.

Dla odkrywania obiektów JMX obsługiwane są dwa klucze pozycji - jmx.discovery[] oraz jmx.get[]:

Klucz pozycji
Wartość zwracana Parametry Komentarz
jmx.discovery[<tryb odkrywania>,<nazwa obiektu>,<unikalny krótki opis>]
Ta pozycja zwraca tablicę JSON z makrami LLD opisującymi obiekty MBean lub ich atrybuty. tryb odkrywania - jedna z następujących wartości: attributes (pobierz atrybuty JMX MBean, domyślnie) lub beans (pobierz 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 odkrywania 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 może zwrócić ta pozycja, 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 odkrywać właściwości MBean zawierające słowo z łącznikiem lub znaki spoza ASCII, należy użyć jmx.get[].
jmx.get[<tryb odkrywania>,<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 odkrywania - jedna z następujących wartości: attributes (pobierz atrybuty JMX MBean, domyślnie) lub beans (pobierz 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 odkrywania i nazwą obiektu na hoście (opcjonalnie)
Podczas używania tej pozycji należy zdefiniować własne makra odkrywania niskiego poziomu, wskazujące wartości wyodrębnione ze zwróconego JSON przy użyciu JSONPath.

Jeśli nie zostaną przekazane żadne parametry, zostaną pobrane wszystkie atrybuty MBean z JMX. Nieokreślenie parametrów dla odkrywania 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:

lld\_rule\_mbean.png

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:

lld\_rule\_mbean\_prototypes.png

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

discovery\_rule\_mbean\_3.png

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:

lld\_rule\_mbean\_attr.png

Użyty tutaj klucz:

jmx.discovery[attributes,"*:type=GarbageCollector,name=*"]

Wszystkie garbage collectory z atrybutem pojedynczej pozycji zostaną wykryte.

lld\_rule\_mbean\_attr\_prototypes.png

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