[comment]: # translation:outdated

[comment]: # ({new-386ff732})
# 5 Обнаружение JMX объектов

[comment]: # ({/new-386ff732})

[comment]: # ({new-d32443b7})
#### Обзор

Имеется возможноть
[обнаружения](/ru/manual/discovery/low_level_discovery) всех атрибутов
JMX MBeans или MBean, а также можно указать шаблон для обнаружения этих
объектов.

Для настройки правила обнаружения обязательно понимать разницу между
Mbean и атрибутами Mbean. MBean является объектом, который может
представлять собой устройство, приложение или любой другой ресурс,
которым необходимо управлять.

Например, имеется Mbean, который представляет собой веб-сервер. Его
атрибутами являются количество подключений, количество потоков, время
ожидания запросов, кэш файлов http, использование памяти и так далее.
Выражая эту мысль человеческим языком, мы можем определить кофе машину
как Mbean, у которого имеются следующие атрибуты для мониторинга:
количество воды на каждую кружку, средний расход воды за определенный
период времени, количество кофейных зерен требующихся на каждую кружку,
кофейные зерна и время наполнения водой и так далее.

[comment]: # ({/new-d32443b7})

[comment]: # ({new-8e770fa9})
#### Ключ элемента данных

В настройках [правила
обнаружения](/ru/manual/discovery/low_level_discovery#правило_обнаружения)
выберите **JMX агент** в поле *Тип*.

Для обнаружения JMX объектов поддерживаются два ключа элементов данных -
jmx.discovery\[\] и jmx.get\[\]:

|**Ключ элемента данных**|<|<|<|
|------------------------------------------|-|-|-|
|<|Возвращаемое значение|Параметры|Комментарий|
|**jmx.discovery**\[<режим обнаружения>,<имя объекта>\]|<|<|<|
|<|Этот элемент данных возвращает JSON массив в LLD макросами, которые описывают MBean объекты с их атрибутами.|**режим обнаружения** - один из: *attributes* (получение JMX MBean атрибутов, по умолчанию) или *beans* (получение JMX MBeans)<br>**имя объекта** - шаблон имени объекта (смотрите [документацию](https://docs.oracle.com/javase/7/docs/api/javax/management/ObjectName.html)), который определяет возвращаемые MBean имена (по умолчанию пусто, получение всех зарегистрированных beans)|Примеры:<br>→ jmx.discovery - получение всех JMX MBean атрибутов<br>→ jmx.discovery\[beans\] - получение всех JMX MBeans<br>→ jmx.discovery\[attributes,"\*:type=GarbageCollector,name=\*"\] - получение всех атрибутов сборщика мусора<br>→ jmx.discovery\[beans,"\*:type=GarbageCollector,name=\*"\] - получение всех сборщиков мусора<br><br>Имеются некоторые [ограничения](#ограничения) в плане какие MBean свойства этот элемента данных может вернуть, эти ограничения основываются на ограниченном количестве символов, поддерживаемом при генерации имён макросов (поддерживаемые символы можно описать следующим регулярным выражением: `A-Z0-9_\.`). Поэтому, например, для обнаружения MBean свойств с наличием дефиса или не-ASCII символами, вам необходимо использовать `jmx.get[]`.<br><br>Поддерживается начиная с Zabbix Java gateway 3.4.|
|**jmx.get**\[<режим обнаружения>,<имя объекта>\]|<|<|<|
|<|Этот элемент данных возвращает JSON массив с MBean объектами или их атрибутами.<br><br>В сравнении с `jmx.discovery[]` он не определяет LLD макросы.|**режим обнаружения** - один из: *attributes* (получение JMX MBean атрибутов, по умолчанию) или *beans* (получение JMX MBeans)<br>**имя объекта** - шаблон имени объекта (смотрите [документацию](https://docs.oracle.com/javase/7/docs/api/javax/management/ObjectName.html)), который определяет возвращаемые MBean имена (по умолчанию пусто, получение всех зарегистрированных beans)|При использовании этого элемента данных необходимо задать пользовательские макросы низкоуровневого обнаружения, которые указывают на значения, извлеченные с полученного JSON с использованием JSONPath.<br><br>Поддерживается начиная с Zabbix Java gateway 4.4.|

::: noteimportant
Если параметры не заданы, запрашиваются все MBean
атрибуты с JMX. Отсутствие заданных параметров в случае с JMX
обнаружением или попытка получения всех атрибутов широкого диапазона,
таких как `*:type=*,name=*`, может привести к потенциальным проблемам
производительности.
:::

[comment]: # ({/new-8e770fa9})

[comment]: # ({new-dbdbb9bc})
#### Использование jmx.discovery

Этот элемент данных возвращает JSON объект с макросами низкоуровневого
обнаружения, которые описывают MBean объекты. Например, при обнаружении
MBean атрибутов (переформатировано для лучшей наглядности):

``` {.javascript}
[
    {
        "{#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"
    }
]
```

В обнаружении MBeans (переформатировано для наглядности):

``` {.javascript}
[
    {
        "{#JMXDOMAIN}":"java.lang",
        "{#JMXTYPE}":"GarbageCollector",
        "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
        "{#JMXNAME}":"PS Scavenge"
    }
]

```

[comment]: # ({/new-dbdbb9bc})

[comment]: # ({new-41c7d097})
##### Поддерживаемые макросы

Следующие макросы поддерживаются для использования в
[фильтре](/ru/manual/discovery/low_level_discovery#фильтр_правила_обнаружения)
правила обнаружения и прототипах элементов данных, триггеров и графиков:

|Макрос|Описание|
|------------|----------------|
|Обнаружение MBean атрибутов|<|
|{\#JMXVALUE}|Значение атрибута.|
|{\#JMXTYPE}|Тип атрибута.|
|{\#JMXOBJ}|Имя объекта.|
|{\#JMXDESC}|Имя объекта, включая имя атрибута.|
|{\#JMXATTR}|Имя атрибуты.|
|Обнаружение MBeans|<|
|{\#JMXDOMAIN}|Домен MBean. (*зарезервированное имя в Zabbix*)|
|{\#JMXOBJ}|Имя объекта. (*зарезервированное имя в Zabbix*)|
|{\#JMX<ключ свойства>}|MBean свойства (такие как {\#JMXTYPE}, {\#JMXNAME}) (смотрите [Ограничения](#ограничения) ниже).|

[comment]: # ({/new-41c7d097})

[comment]: # ({new-8c9889ad})
##### Ограничения

Имеются некоторые ограничения связанные с алгоритмом создания имён LLD
макросов с имён MBean свойств:

-   регистр имён атрибута сменится на верхний регистр
-   регистр имени атрибута игнорируется (макрос LLD не генерируется) в
    случае, если он содержит неподдерживаемые символы для имён LLD
    макросов. Поддерживаемые символы можно описать следующим регулярным
    выражением: `A-Z0-9_\.`
-   если имя атрибута называется "*obj*" или "*domain*", оно будет
    заменено значениями свойств Zabbix {\#JMXOBJ} и {\#JMXDOMAIN}
    (поддерживается начиная с Zabbix 3.4.3.)

Пожалуйста, обратите внимание на этот пример с jmx.discovery (с "beans"
режимом). У MBean имеются следующие свойства:

    name=test
    тип=Type
    attributes []=1,2,3
    Name=NameOfTheTest
    domAin=some

В результате JMX обнаружения сгенерируются следующие LLD макросы:

-   {\#JMXDOMAIN} - Zabbix внутренний, описывающий домен MBean
-   {\#JMXOBJ} - Zabbix внутренний, описывающий объект MBean
-   {\#JMXNAME} - создается из свойства "name"

Игнорируемые свойства:

-   тип : это имя содержит неподдерживаемые символы (не-ASCII)
-   attributes\[\] : это имя содержит неподдерживаемые символы
    (квадратные скобки не поддерживаются)
-   Name : уже задан (name=test)
-   domAin : является зарезервированным именем в Zabbix

[comment]: # ({/new-8c9889ad})

[comment]: # ({new-905ac1fe})
##### Примеры

Давайте рассмотрим еще два практических примера создания LLD правила с
использованием Mbean. Для понимания разницы между LLD правилом, которое
собирает Mbeans, и LLD правилом, которое собирает Mbean атрибуты, лучше
взгляните на следующую таблицу:

|   |   |   |
|---|---|---|
|**MBean1**|**MBean2**|**MBean3**|
|MBean1Attribute1|MBean2Attribute1|MBean3Attribute1|
|MBean1Attribute2|MBean2Attribute2|MBean3Attribute2|
|MBean1Attribute3|MBean2Attribute3|MBean3Attribute3|

[comment]: # ({/new-905ac1fe})

[comment]: # ({new-cc0f30b7})
##### Пример 1: Обнаружение Mbeans

Это правило вернет 3 объекта: колонки верхней строки: MBean1, MBean2,
MBean3.

Для получения более подробной информации об объектах, пожалуйста,
обратитесь к таблице [поддерживаемых
макросов](/ru/manual/discovery/low_level_discovery/jmx#поддерживаемые_макросы),
раздел *Обнаружение MBeans*.

Настройки правила обнаружения, собирающего Mbeans (без атрибутов),
выглядят следующим образом:

![lld\_rule\_mbean0.png](../../../../assets/en/manual/discovery/low_level_discovery/lld_rule_mbean0.png)

Используемый ключ:

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

Обнаружатся все сборщики мусора без атрибутов. Так как сборщики мусора
имеют одинаковый набор атрибутов, мы может использовать желаемые
атрибуты в прототипах элементов данных следующим образом:

![discovery\_rule\_mbean\_2.png](../../../../assets/en/manual/discovery/low_level_discovery/discovery_rule_mbean_2.png){width="600"}

Используемые ключи:

    jmx[{#JMXOBJ},CollectionCount] 
    jmx[{#JMXOBJ},CollectionTime] 
    jmx[{#JMXOBJ},Valid] 

Результатом LLD правила обнаружения будет что-то близкое к этому
(элементы данных обнаружились по двум сборщикам мусора):

![discovery\_rule\_mbean\_3.png](../../../../assets/en/manual/discovery/low_level_discovery/discovery_rule_mbean_3.png){width="600"}

[comment]: # ({/new-cc0f30b7})

[comment]: # ({new-d9e2bae6})
##### Пример 2: Обнаружение Mbean атрибутов

Это правило вернет 9 объектов со следующими полями: MBean1Attribute1,
MBean2Attribute1, Mbean3Attribute1,MBean1Attribute2,MBean2Attribute2,
Mbean3Attribute2, MBean1Attribute3, MBean2Attribute3, Mbean3Attribute3.

Для получения более подробной информации об объектах, пожалуйста,
обратитесь к таблице [поддерживаемых
макросов](/ru/manual/discovery/low_level_discovery/jmx#поддерживаемые_макросы),
раздел *Обнаружение MBean атрибутов*.

Настройки правила обнаружения, собирающего Mbean атрибуты, выглядят
следующим образом:

![lld\_rule\_mbean\_attr0.png](../../../../assets/en/manual/discovery/low_level_discovery/lld_rule_mbean_attr0.png)

Используемый ключ:

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

Обнаружатся все сборщики мусора с одним элементом атрибута.

![discovery\_rule\_mbean\_attributes\_2.png](../../../../assets/en/manual/discovery/low_level_discovery/discovery_rule_mbean_attributes_2.png){width="600"}

В этом конкретном случае элемент данных создастся из прототипа по
каждому MBean атрибуту. Основным недостаткой подобной конфигурации
является то, что невозможно создать триггер из прототипов триггеров, так
как имеется только один прототип элементов данных по всем атрибутам.
Таким образом, подобную установку можно использовать для сбора данных,
но не рекомендуется использовать для автоматического мониторинга.

[comment]: # ({/new-d9e2bae6})

[comment]: # ({new-6d62dc78})
#### Использование jmx.get

`jmx.get[]` похож на `jmx.discovery[]` элемент данных, но он не
преобразует параметры Java объектов в имена макросов низкоуровневого
обнаружения и, таким образом, может возвращать значения без
[ограничений](#ограничения), которые связаны с генерацией имён LLD
макросов, такими как наличие дефисов или не-ASCII символов.

При использовании `jmx.get[]` для обнаружения, макросы низкоуровневого
обнаружения можно определять отдельно на вкладке пользовательских [LLD
макросов](/ru/manual/discovery/low_level_discovery#правило_обнаружения)
настройки правила, используя JSONPath для обращения к требуемым
значениям.

[comment]: # ({/new-6d62dc78})

[comment]: # ({new-b087c327})
##### Обнаружение MBeans

Элемент данных обнаружения: `jmx.get[beans,"com.example:type=*,*"]`

Ответ:

``` {.json}
[
    {
        "object": "com.example:type=Hello,data-src=data-base,key=value",
        "domain": "com.example",
        "properties": {
            "data-src": "data-base",
            "key": "value",
            "type": "Hello"
        }
    },
    {
        "object": "com.example:type=Atomic",
        "domain": "com.example",
        "properties": {
            "type": "Atomic"
        }
    }
]
```

[comment]: # ({/new-b087c327})

[comment]: # ({new-cb2449af})
##### Обнаружение MBean атрибутов

Элемент данных обнаружения: `jmx.get[attributes,"com.example:type=*,*"]`

Ответ:

``` {.json}
[
    {
        "object": "com.example:type=*",
        "domain": "com.example",
        "properties": {
            "type": "Simple"
        }
    },
    {
        "object": "com.zabbix:type=yes,domain=zabbix.com,data-source=/dev/rand,key=value,obj=true",
        "domain": "com.zabbix",
        "properties": {
            "type": "Hello",
            "domain": "com.example",
            "data-source": "/dev/rand",
            "key": "value",
            "obj": true
        }
    }
]
```

[comment]: # ({/new-cb2449af})
