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:

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