Существует возможность обнаруживать все JMX MBean-ы или атрибуты MBean, либо указывать шаблон для обнаружения этих объектов.
Для настройки правила обнаружения обязательно нужно понимать различие между объектами MBean и атрибутами MBean. MBean - это объект, который может представлять устройство, приложение или любой другой ресурс, требующий наблюдения.
Например, существует MBean, представляющий веб-сервер. Его атрибутами являются количество соединений, количество потоков, тайм-аут запроса, файловый кэш http, использование памяти и т.д. Выражая эту мысль понятным человеческим языком, мы можем определить кофеварку как MBean, имеющий следующие атрибуты для мониторинга: количество воды на чашку, средний расход воды за определенный период времени, количество кофейных зёрен, необходимое на чашку, время перезаправки кофейными зёрнами и водой и т. д.
В настройках правила обнаружения, в поле Тип выберите JMX агент.
Для обнаружения JMX объектов поддерживаются два ключа элементов данных - jmx.discovery[] и jmx.get[]:
Ключ элемента данных | |||
---|---|---|---|
Возвращаемое значение | Параметры | Комментарий | |
jmx.discovery[<режим обнаружения>,<имя объекта>,<уникальное короткое описание>] | |||
Этот элемент данных возвращает массив JSON с LLD макросами, описывающими объекты MBean или их атрибуты. | режим обнаружения - один из следующих: attributes (вернуть атрибуты JMX MBean, по умолчанию) или beans (вернуть объекты JMX MBean) имя объекта - шаблон имени объекта (см. документацию [en]), идентифицирующий имена MBean-ов, которые надо вернуть (по умолчанию пусто, вернёт все зарегистрированные bean-ы) уникальное короткое описание - уникальное описание, позволяющее на том же узле сети задать несколько элементов данных JMX с тем же режимом обнаружения и именем объекта (опционально) |
Примеры: → jmx.discovery - вернуть все атрибуты JMX MBean-ов → jmx.discovery[beans] - вернуть все JMX MBean-ы → jmx.discovery[attributes,"*:type=GarbageCollector,name=*"] - вернуть все атрибуты сборщика мусора (garbage collector-а) → 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 MBean) имя объекта - шаблон имени объекта (см. документацию [en]), идентифицирующий имена MBean-ов, которые надо вернуть (по умолчанию пусто, вернёт все зарегистрированные bean-ы) уникальное короткое описание - уникальное описание, позволяющее на том же узле сети задать несколько элементов данных JMX с тем же режимом обнаружения и именем объекта (опционально) |
При использовании этого элемента данных необходимо определить настраиваемые макросы низкоуровневого обнаружения, указывающие на значения, извлекаемые из возвращаемого JSON-а с помощью JSONPath. Поддерживается с версии Zabbix Java gateway 4.4. |
Если не передано никаких параметров, из JMX запрашиваются все атрибуты MBean-ов. Отсутствие параметров для JMX обнаружения или попытка получить все атрибуты для широкого диапазона наподобие *:type=*,name=*
может привести к потенциальным проблемам с производительностью.
Этот элемент данных возвращает объект JSON с макросами низкоуровневого обнаружения, описывающими объекты MBean или их атрибуты. Например, при обнаружении атрибутов MBean attributes (отформатировано для наглядности):
[
{
"{#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:
A-Z0-9_\.
Пожалуйста, рассмотрите данный пример jmx.discovery (с режимом «beans»). MBean имеет следующие определённые для него свойства (некоторые из которых будут игнорироваться; см. ниже):
В результате JMX обнаружения, будут сгенерированы следующие LLD макросы:
Проигнорированные свойства:
Давайте обратимся ещё к двум более практическим примерам создания правил LLD с применением MBean. Для лучшего понимания разницы между правилом LLD, собирающем объекты MBeans, и правилом LLD, собирающем атрибуты MBean, взгляните на следующую таблицу:
MBean1 | MBean2 | MBean3 |
MBean1Attribute1 | MBean2Attribute1 | MBean3Attribute1 |
MBean1Attribute2 | MBean2Attribute2 | MBean3Attribute2 |
MBean1Attribute3 | MBean2Attribute3 | MBean3Attribute3 |
Это правило вернёт 3 объекта: верхнюю строку со столбцами: MBean1, MBean2, MBean3.
Для более подробной информации об объектах, пожалуйста, обратитесь к таблице поддерживаемые макросы, раздел Обнаружение объектов MBean.
Конфигурация правила обнаружения для сбора объектов MBeans (без атрибутов) выглядит наподобие следующего:
Используемый здесь ключ:
Будут обнаружены все сборщики мусора (garbage collectors) без атрибутов. Поскольку сборщики мусора имеют одинаковый набор атрибутов, мы можем использовать желаемые атрибуты в прототипах элементов данных следующим образом:
Используемые здесь ключи:
Правило LLD обнаружения приведёт к чему-то, близкому к этому (элементы данных обнаружены для двух сборщиков мусора):
Этот объект вернёт 9 объектов со следующими полями: MBean1Attribute1, MBean2Attribute1, MBean3Attribute1, MBean1Attribute2, MBean2Attribute2, MBean3Attribute2, MBean1Attribute3, MBean2Attribute3, MBean3Attribute3.
Для более подробной информации об объектах, пожалуйста, обратитесь к таблице поддеживаемых макросов, раздел Обнаружение атрибутов MBean.
Конфигурация правила обнаружения, собирающего атрибуты MBean, выглядит наподобие следующего:
Используемый здесь ключ:
Будут обнаружены все сборщики мусора с одним атрибутом.
В данном конкретном случае будет создан элемент данных из прототипа для каждого атрибута MBean. Главный недостаток этой конфигурации - что невозможно создание триггера из прототипа триггера, поскольку имеется только один прототип элемента данных для всех атрибутов. Поэтому такая настройка может использоваться для сбора данных, но не рекомендуется для автоматического мониторинга.
Элемент данных jmx.get[]
похож на jmx.discovery[]
, но он не превращает свойства объектов Java в имена макросов низкоуровневого обнаружения и поэтому может возвращать значения без ограничений, связанных с генерацией имён LLD макросов - таких как дефисы или не-ASCII символы.
При использовании jmx.get[]
для обнаружения, макросы низкоуровневого обнаружения могут быть определены отдельно на вкладке настраиваемых LLD макросов настроек правила обнаружения, используя JSONPath для указания на нужные значения.
Элемент данных обнаружения: jmx.get[beans,"com.example:type=*,*"]
Ответ:
[
{
"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"
}
}
]
Элемент данных обнаружения: 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,ключ=значение,obj=true",
"domain": "com.zabbix",
"properties": {
"type": "Hello",
"domain": "com.example",
"data-source": "/dev/rand",
"ключ": "значение",
"obj": true
}
}
]