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:

lld\_rule\_mbean.png

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:

lld\_rule\_mbean\_prototypes.png

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

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=*"]

Wszyscy garbage collectory z atrybutem pojedynczej pozycji zostaną wykryci.

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