4 Обнаружение JMX объектов

Обзор

Имеется возможноть обнаружения всех атрибутов JMX MBeans или MBean, а также можно указать шаблон для обнаружения этих объектов.

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

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

Ключ элемента данных

В настройках правила обнаружения выберите JMX агент в поле Тип.

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

Ключ элемента данных
Возвращаемое значение Параметры Комментарий
jmx.discovery[<режим обнаружения>,<имя объекта>]
Этот элемент данных возвращает JSON массив в LLD макросами, которые описывают MBean объекты с их атрибутами. режим обнаружения - один из: attributes (получение JMX MBean атрибутов, по умолчанию) или beans (получение JMX MBeans)
имя объекта - шаблон имени объекта (смотрите документацию), который определяет возвращаемые MBean имена (по умолчанию пусто, получение всех зарегистрированных beans)
Примеры:
→ jmx.discovery - получение всех JMX MBean атрибутов
→ jmx.discovery[beans] - получение всех JMX MBeans
→ jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - получение всех атрибутов сборщика мусора
→ jmx.discovery[beans,"*:type=GarbageCollector,name=*"] - получение всех сборщиков мусора

Имеются некоторые ограничения в плане какие MBean свойства этот элемента данных может вернуть, эти ограничения основываются на ограниченном количестве символов, поддерживаемом при генерации имён макросов (поддерживаемые символы можно описать следующим регулярным выражением: A-Z0-9_\.). Поэтому, например, для обнаружения MBean свойств с наличием дефиса или не-ASCII символами, вам необходимо использовать jmx.get[].

Поддерживается начиная с Zabbix Java gateway 3.4.
jmx.get[<режим обнаружения>,<имя объекта>]
Этот элемент данных возвращает JSON массив с MBean объектами или их атрибутами.

В сравнении с jmx.discovery[] он не определяет LLD макросы.
режим обнаружения - один из: attributes (получение JMX MBean атрибутов, по умолчанию) или beans (получение JMX MBeans)
имя объекта - шаблон имени объекта (смотрите документацию), который определяет возвращаемые MBean имена (по умолчанию пусто, получение всех зарегистрированных beans)
При использовании этого элемента данных необходимо задать пользовательские макросы низкоуровневого обнаружения, которые указывают на значения, извлеченные с полученного JSON с использованием JSONPath.

Поддерживается начиная с Zabbix Java gateway 4.4.

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

Использование jmx.discovery

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

[
           {
               "{#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 (переформатировано для наглядности):

[
           {
               "{#JMXDOMAIN}":"java.lang",
               "{#JMXTYPE}":"GarbageCollector",
               "{#JMXOBJ}":"java.lang:type=GarbageCollector,name=PS Scavenge",
               "{#JMXNAME}":"PS Scavenge"
           }
       ]
Поддерживаемые макросы

Следующие макросы поддерживаются для использования в фильтре правила обнаружения и прототипах элементов данных, триггеров и графиков:

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

Имеются некоторые ограничения связанные с алгоритмом создания имён 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
Примеры

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

MBean1 MBean2 MBean3
MBean1Attribute1 MBean2Attribute1 MBean3Attribute1
MBean1Attribute2 MBean2Attribute2 MBean3Attribute2
MBean1Attribute3 MBean2Attribute3 MBean3Attribute3
Пример 1: Обнаружение Mbeans

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

Для получения более подробной информации об объектах, пожалуйста, обратитесь к таблице поддерживаемых макросов, раздел Обнаружение MBeans.

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

lld_rule_mbean0.png

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

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

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

discovery_rule_mbean_2.png

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

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

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

discovery_rule_mbean_3.png

Пример 2: Обнаружение Mbean атрибутов

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

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

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

lld_rule_mbean_attr0.png

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

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

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

discovery_rule_mbean_attributes_2.png

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

Использование jmx.get

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

При использовании jmx.get[] для обнаружения, макросы низкоуровневого обнаружения можно определять отдельно на вкладке пользовательских LLD макросов настройки правила, используя JSONPath для обращения к требуемым значениям.

Обнаружение MBeans

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

Ответ:

[
           {
               "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"
               }
           }
       ]
Обнаружение MBean атрибутов

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

Ответ:

[
           {
               "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
               }
           }
       ]