Расширения JMX: различия между версиями
ENetrebin (обсуждение | вклад) (Новая страница: «JMX ( Java Management Extensions ) идеально подходит для мониторинга приложений, созданных с использов...») |
ENetrebin (обсуждение | вклад) |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''''[https://doc.ruscomtech.ru/index.php/Расширения Расширения] / [https://doc.ruscomtech.ru/index.php/Расширения#.D0.A0.D0.B0.D1.81.D1.88.D0.B8.D1.80.D0.B5.D0.BD.D0.B8.D1.8F_.D0.9A.D0.BB.D1.8E.D1.87-.D0.90.D1.81.D1.82.D1.80.D0.BE.D0.BC Расширения Ключ-АСТРОМ] / Расширения JMX''''' | |||
JMX ( Java Management Extensions ) идеально подходит для мониторинга приложений, созданных с использованием Java. С помощью Ключ-АСТРОМ вы можете отслеживать любую метрику в вашей JVM, которая предоставляется через MBean. | JMX ( Java Management Extensions ) идеально подходит для мониторинга приложений, созданных с использованием Java. С помощью Ключ-АСТРОМ вы можете отслеживать любую метрику в вашей JVM, которая предоставляется через MBean. | ||
Строка 5: | Строка 7: | ||
== Создайте расширение JMX == | == Создайте расширение JMX == | ||
''Ключ-АСТРОМ версии 1.162 и более поздних версий'' | |||
# Войдите в Ключ-АСТРОМ, выберите «Настройки » > «Мониторинг » > «Отслеживаемые технологии» и нажмите «Добавить мониторинг новой технологии ». Из четырех доступных вариантов один — Monitor Java или технологии на базе WebSphere . Нажмите «Добавить расширение JMX/PMI ». | # Войдите в Ключ-АСТРОМ, выберите «Настройки » > «Мониторинг » > «Отслеживаемые технологии» и нажмите «Добавить мониторинг новой технологии ». Из четырех доступных вариантов один — Monitor Java или технологии на базе WebSphere . Нажмите «Добавить расширение JMX/PMI ». | ||
# Нажмите «Использовать редактор расширений JMX/PMI ». | # Нажмите «Использовать редактор расширений JMX/PMI ». | ||
Строка 34: | Строка 36: | ||
==== Выберите атрибут ==== | ==== Выберите атрибут ==== | ||
Атрибуты, доступные в списке, являются только числовыми. Чтобы просмотреть другие атрибуты, например атрибуты типа <code>String</code>, выберите «Включить нечисловые атрибуты» . Обратите внимание, что выбранные атрибуты должны быть разборчивыми для двойного или логического типа. В противном случае ЕдиныйАгент Ключ-АСТРОМ не будет собирать данные по такой метрике. | Атрибуты, доступные в списке, являются только числовыми. Чтобы просмотреть другие атрибуты, например атрибуты типа <code>String</code>, выберите «Включить нечисловые атрибуты» . Обратите внимание, что выбранные атрибуты должны быть разборчивыми для двойного или логического типа. В противном случае ЕдиныйАгент Ключ-АСТРОМ не будет собирать данные по такой метрике. | ||
==== Отображаемое имя ==== | |||
Вы можете определить собственное отображаемое имя для метрики. | |||
==== Единица ==== | |||
Выберите метрическую единицу измерения. | |||
==== Агрегация ==== | |||
Выберите метод агрегирования, если вы извлекаете атрибут из нескольких совпадающих Mbeans. | |||
==== Расчет ==== | |||
Дельта вычисляет изменение значений данного атрибута. Скорость вычисляет скорость изменений в секунду. Если вы выберете оба варианта, вы сможете преобразовать абсолютный атрибут (например, количество запросов) в скорость (например, количество запросов в секунду). Значение = атрибут/интервал запроса. | |||
== Создание расширения PMI == | |||
Создание расширения PMI очень похоже на создание расширения JMX. Модуль PMI преобразует в JMX Mbean, а статистику — в атрибуты. Все остальные настройки ведут себя соответственно. | |||
== Сохранение расширения == | |||
После добавления метрики вы по-прежнему можете редактировать или удалять ее определение. Вам необходимо нажать кнопку «Сохранить» , чтобы зарегистрировать расширение и начать сбор данных из всех процессов Java, содержащих определенные MBean-компоненты. После сохранения расширения вы не сможете редактировать или удалять метрики, поскольку таким образом мы сможем обеспечить непрерывность ваших данных. Вы по-прежнему можете добавлять новые показатели. Однако на этот раз вы не сможете выбрать базовый процесс Java, поскольку вы будете использовать процесс, в котором расширение уже развернуто. | |||
== Настройка вашего расширения == | |||
Расширения Ключ-АСТРОМ JMX имеют широкие возможности настройки, выходящие за рамки возможностей редактора. Вы можете скачать свое расширение и отредактировать его файл JSON, в котором описываются ваши метрики JMX и то, как вы хотите их отображать. Справку и примеры см. в разделе «Настройка плагинов JMX» . | |||
== Просмотр метрик JMX в Ключ-АСТРОМ == | |||
Метрики JMX доступны для всех процессов на основе Java, контролируемых ЕдинымАгентом. | |||
После загрузки вашего расширения Ключ-АСТРОМ автоматически начинает запрашивать определенные метрики для всех процессов Java. Чтобы найти метрики, перейдите на соответствующую страницу процесса и нажмите «Подробнее» . | |||
[[Файл:jmx1.png]] | |||
Например, для расширения с именем <code>HornetQ</code>перейдите к процессу, который вы выбрали при создании расширения, нажмите « Дополнительные сведения» , а затем выберите вкладку HornetQ , имя которой автоматически соответствует имени расширения. Там вы найдете все определенные метрики. | |||
[[Файл:jmx2.png]] | |||
''Не видите определенный показатель?'' | |||
''Мониторинг JMX очень динамичен. Если определенная метрика не существует в вашей JVM, это не ошибка — метрика просто недоступна.'' | |||
== Пользовательские метрики расширения JMX/PMI == | |||
Вы можете заметить, что количество метрик в <code>plugin.json</code>файле вашего расширения JMX/PMI отличается от количества выставленных счетов специальных метрик. Это связано с тем, что расширения JMX/PMI предоставляют «разделения», которые можно использовать для определения дополнительных измерений для сообщаемых показателей. Для каждого значения выбранного свойства во время выполнения создается отдельная метрика временного ряда. Фактическое количество метрик таймсерий зависит от количества различных значений выбранного свойства. | |||
В следующем примере показано, как определить метрику, которая предоставляет несколько временных рядов с одной метрикой: | |||
<code>"metrics": [ | |||
{ | |||
"timeseries": { | |||
"key": "XY.Size", | |||
"unit": "Count", | |||
"displayname": "Queue Consumer Count", | |||
"dimensions": [ | |||
"rx_pid", | |||
"name" | |||
] | |||
} | |||
"source": { | |||
"domain": "com.sample", | |||
"keyProperties": { | |||
"type": "XY", | |||
"name": "*" | |||
}, | |||
"attribute": "Size", | |||
"splitting": { | |||
"name": "name", | |||
"type": "keyProperty", | |||
"keyProperty": "name" | |||
} | |||
} | |||
} | |||
]</code> | |||
В этом примере MBeans <code>com.sample:type=XY,name=A</code>и <code>com.sample:type=XY,name=B</code>приведет к получению двух метрик временных рядов ( <code>A</code>и <code>B</code>). | |||
Поскольку такие значения обычно заранее не известны и могут быть изменены, это может привести к неожиданно большому количеству потребляемых специальных метрик . Если значения свойства известны заранее или интерес представляют только некоторые значения, мы рекомендуем указать одну метрику для каждого значения и не использовать разделение. | |||
== Ограничение метрик для расширения JMX == | |||
Для каждого расширения JMX может быть не более <code>5,000</code>метрик. Это ограничение необходимо для предотвращения перегрузки системы мониторинга неэффективными или перегруженными метриками расширениями. | |||
== '''Настройка расширений JMX''' == | |||
JMX расширения определяются с помощью файлов JSON. | |||
Определение расширения состоит из трех основных элементов: метаданных (metadata), метрик (metrics) и пользовательского интерфейса (UI). | |||
''1 Основной формат следующий:'' | |||
''2 {'' | |||
''3 "version": "1.0",'' | |||
''4 "name": "custom.jmx.hornetq",'' | |||
''5 "type": "JMX",'' | |||
''6 "entity": "PROCESS_GROUP_INSTANCE",'' | |||
''7 "metricGroup": "tech.HornetQ",'' | |||
''8 "configUI" : {'' | |||
''9 "displayName": "HornetQ JMX"'' | |||
''10 },'' | |||
''11 "metrics": [ ],'' | |||
''12 "ui": {'' | |||
''13 "keycharts" : [ ],'' | |||
''14 "charts": [ ]'' | |||
''15 }'' | |||
''16 }'' | |||
=== '''Метаданные''' === | |||
Каждое расширение JMX имеет следующие обязательные свойства: | |||
{| class="wikitable" | |||
|+ | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|version | |||
|String | |||
|Версия расширения, в формате 1.23, должна быть обновлена каждый раз, когда обновляется определение расширения. | |||
|- | |||
|name | |||
|String | |||
|Уникальное имя расширения в формате пакета Java. Имена пользовательских расширений JMX должны соответствовать правилу custom.jmx.name. Вы можете использовать только буквы, цифры и символы "-", "_". Например, custom.jmx.newPlugin-Ver2. | |||
|- | |||
|type | |||
|String | |||
|Всегда используйте JMX. | |||
|- | |||
|entity | |||
|String | |||
|Всегда используйте PROCESS_GROUP_INSTANCE | |||
|- | |||
|metricGroup | |||
|String | |||
|Метрическая группа используется для группировки пользовательских метрик в иерархическое пространство имен, где разные источники, например, несколько расширений, могут вносить свой вклад. Кроме того, метрическая группа становится основной частью ключа метрики. Поэтому, однажды определенная, она не может быть изменена. Разрешенные символы - буквы, цифры, "-", "_" символы. | |||
|- | |||
|configUI.displayName | |||
|String | |||
|Читаемое человеком название расширения. Это название отображается на странице расширений мониторинга после загрузки расширения. | |||
|} | |||
=== '''Метрики''' === | |||
Эта часть JSON определяет, какие метрики собираются расширением. Каждая метрика определяется JSON в формате, аналогичном следующему: | |||
''1{'' | |||
''2 "timeseries": {'' | |||
''3 "key": "Queue.ConsumerCount",'' | |||
''4 "unit": "Count",'' | |||
''5 "displayname": "Queue Consumer Count",'' | |||
''6 "dimensions": ['' | |||
''7 "rx_pid"'' | |||
''8 ]'' | |||
''9 },'' | |||
''10 "alert_settings": ['' | |||
''11 {'' | |||
''12 "alert_id": "too_many_consumers",'' | |||
''13 "event_type": "PERFORMANCE_EVENT",'' | |||
''14 "event_name": "Too many consumers",'' | |||
''15 "description": "The {metricname} of {severity} is {alert_condition} the threshold of {threshold}",'' | |||
''16 "threshold": 35.0,'' | |||
''17 "alert_condition": "ABOVE",'' | |||
''18 "samples":5,'' | |||
''19 "violating_samples":3,'' | |||
''20 "dealerting_samples":5,'' | |||
''21 "value_extractor": "MAX"'' | |||
''22 }'' | |||
''23 ],'' | |||
''24 "source": {'' | |||
''25 "domain": "org.hornetq",'' | |||
''26 "keyProperties": {'' | |||
''27 "type": "Queue"'' | |||
''28 },'' | |||
''29 "attribute": "ConsumerCount"'' | |||
''30 }'' | |||
''31 }'' | |||
=== '''Временной ряд''' === | |||
Эта часть определяет метаданные метрики. | |||
{| class="wikitable" | |||
|+ | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|key | |||
|String | |||
|Название метрики. Должно быть уникальным в рамках данного расширения. Разрешены только буквы, цифры и символы "-" и "_". | |||
|- | |||
|unit | |||
|String | |||
|Метрическая единица. Должна быть одной из доступных описанных ниже единиц. | |||
|- | |||
|dimensions | |||
|String array | |||
|Должен содержать rxpid в индексе 0. Это гарантирует, что атрибуты JMX получают идентификатор системного процесса (PID) в качестве измерения. Дополнительные измерения могут использоваться, например, для предоставления одной метрики на каждое значение свойства ключа JMX ObjectName (например, QueueName, ThreadPoolName или ConnectionPoolName). Разрешены только буквы, цифры и символы "-" и "". | |||
|- | |||
|displayname | |||
|String | |||
|Имя отображения метрики, представляющее метрику в решение. Это поле обязательно. Оно должно отличаться от ключа метрики. | |||
|} | |||
Доступные единицы: | |||
''NanoSecond, MicroSecond, MilliSecond, Second, Byte, KiloByte, MegaByte, BytePerSecond, BytePerMinute, KiloBytePerSecond, KiloBytePerMinute, MegaBytePerSecond, MegaBytePerMinute, Count, PerSecond, PerMinute'' | |||
'''Настройки оповещений''' | |||
Эта часть определяет конфигурацию одного или нескольких оповещений для заданного временного ряда.. | |||
{| class="wikitable" | |||
|+ | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|alert_id | |||
|String | |||
|Уникальный идентификатор оповещения. Разрешены только буквы, цифры и символы "-" и "_". | |||
|- | |||
|event_type | |||
|String | |||
|Разрешенные типы: PERFORMANCE_EVENT, ERROR_EVENT, AVAILABILITY_EVENT. | |||
|- | |||
|description | |||
|String | |||
|Описание определяет сообщение оповещения, в сообщении, могут быть использованы следующие метки: {threshold} значение порога, который был нарушен, {severity} важность, {entityname} имя объекта, {violating_samples} минуты превышения в интервале оценки, {dimensions} разбиения\сплиты, {alert_condition} отображает метку условия наступления - выше/ниже порога. | |||
|- | |||
|event_name | |||
|String | |||
|Название события, отображаемое на страницах пользовательского интерфейса. | |||
|- | |||
|threshold | |||
|Float | |||
|Значение порога | |||
|- | |||
|alert_condition | |||
|String | |||
|Условие выше (ABOVE) или ниже (BELOW). | |||
|- | |||
|samples | |||
|Integer | |||
|Размер интервала в минутах, в котором подсчитываются нарушающие образцы. | |||
|- | |||
|violating_samples | |||
|Integer | |||
|Количество минут, в которых, порог превышен | |||
|- | |||
|dealerting_samples | |||
|Integer | |||
|Количество минут, в которы, порог вернулся в норму | |||
|- | |||
|value_extractor | |||
|String | |||
|Решение фиксирует значение каждые 10 секунд, но отправляет только одно совокупное значение в минуту. Здесь указывается способ агрегирования этих 10-секундных значений. Возможные значения: MIN, MAX, SUM, COUNT, AVG, MEDIAN, P90. Значение по умолчанию - AVG | |||
|} | |||
'''Источник''' | |||
Эта часть определяет способ сбора метрики с помощью JMX. Для всех метрик необходимы следующие атрибуты: | |||
{| class="wikitable" | |||
|+ | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|domain | |||
|String | |||
|Доменное имя MBean | |||
|- | |||
|keyProperties | |||
|Key, Value pairs | |||
|Ключевые свойства MBean. Значения могут содержать подстановочные знаки (*) | |||
|- | |||
|attribute | |||
|String | |||
|Имя атрибута, содержащего метрическое значение. | |||
|} | |||
Необязательные атрибуты: | |||
{| class="wikitable" | |||
|+ | |||
|attributePath | |||
|String | |||
|См. раздел составные данные | |||
|- | |||
|allowAdditionalKeys | |||
|Boolean | |||
|Если значение равно false, свойство keyProperties должно точно совпадать. Дополнительные ключи в имени приведут к несоответствию. Если true, то дополнительные ключевые свойства, отличные от указанных в «keyProperties», разрешены и игнорируются. | |||
|- | |||
|calculateDelta | |||
|bool | |||
|Если true, вычислите изменение значений данного атрибута. Значение = атрибут (t) - атрибут (t-1). Это полезно для монотонно возрастающих значений. | |||
|- | |||
|calculateRate | |||
|bool | |||
|Если true, вычислите частоту изменений в секунду. Это используется в комбинации с calculateDelta для преобразования абсолютного атрибута (например, Количество запросов) к ставке (например, запросов в секунду). Значение = атрибут/интервал запроса | |||
|- | |||
|aggregation | |||
|String | |||
|Он используется для агрегирования нескольких значений, если более 1 MBean соответствует фильтру свойств домена и ключа. Возможные значения: SUM, AVG, MIN, MAX | |||
|- | |||
|splitting | |||
|Object | |||
|Установить Разбивку\разделение | |||
|} | |||
'''Разбивка''' | |||
Разделение можно использовать для определения дополнительного размера для метрики. Это измерение должно быть определено в свойстве измерения временных рядов и свойстве разделения источника. | |||
''1"splitting": {'' | |||
''2 "name": "name",'' | |||
''3 "type": "keyProperty",'' | |||
''4 "keyProperty": "name"'' | |||
''5 }'' | |||
Для определения нескольких разделений используйте следующий формат: | |||
1"splittings":[ | |||
''2 {'' | |||
''3 "name":"name",'' | |||
''4 "type":"keyProperty",'' | |||
''5 "keyProperty":"name"'' | |||
''6 },'' | |||
''7 {'' | |||
''8 "name":"context",'' | |||
''9 "type":"keyProperty",'' | |||
''10 "keyProperty":"context"'' | |||
''11 }'' | |||
''12]'' | |||
Для каждого разделения должны присутствовать следующие атрибуты: | |||
{| class="wikitable" | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|name | |||
|String | |||
|Должно соответствовать имени измерения, определенному для временных рядов | |||
|- | |||
|type | |||
|String | |||
|Всегда должно быть keyProperty | |||
|- | |||
|keyProperty | |||
|String | |||
|Определяет ключевое свойство ObjectName MBean, используемое для разбиения/разделения. | |||
|} | |||
'''Пример метрики с дополнительным разделением (splitting)''' | |||
В следующем примере показано, как определить метрику, которая обеспечивает несколько временных интервалов в пределах одной метрики: | |||
''1{'' | |||
''2 "timeseries": {'' | |||
''3 "key": "XY.Size",'' | |||
''4 "unit": "Count",'' | |||
''5 "displayname": "Queue Consumer Count",'' | |||
''6 "dimensions": ['' | |||
''7 "rx_pid",'' | |||
''8 "name"'' | |||
''9 ]'' | |||
''10 }'' | |||
''11 "source": {'' | |||
''12 "domain": "com.sample",'' | |||
''13 "keyProperties": {'' | |||
''14 "type": "XY",'' | |||
''15 "name": "*"'' | |||
''16 },'' | |||
''17 "attribute": "Size",'' | |||
''18 "splitting": {'' | |||
''19 "name": "name",'' | |||
''20 "type": "keyProperty",'' | |||
''21 "keyProperty": "name"'' | |||
''22 }'' | |||
''23 }'' | |||
''24 }'' | |||
Например, MBeans com.sample: type = XY, name = A и com.sample: type = XY, name = B приведет к появлению двух временных рядов: первого для «A» и второго для «B». | |||
'''Составные данные:''' | |||
Чтобы извлечь значения отдельных ключей, возвращенных атрибутом как тип Составные данные - CompositeData, необходимо использовать механизм attriburePath и указать на интересующий ключ. | |||
Например, предположим, что необходимо извлечь значение used из атрибута HeapMemureUsage. HeapMemureUsage является типом CompositeData, который возвращает следующий список пар значение-ключ: | |||
''1{'' | |||
''2 committed: integer,'' | |||
''3 init: integer,'' | |||
''4 max: integer,'' | |||
''5 used: integer'' | |||
''6}'' | |||
Определите метрику, которая указывает на MBean с атрибутом HeapMemityUsage, и в разделе источника укажите attriburePath на используемый ключ. Например: | |||
''1"source": {'' | |||
''2 "domain": "java.lang",'' | |||
''3 "keyProperties": {'' | |||
''4 "type": "Memory",'' | |||
''5 },'' | |||
''6 "attribute": "HeapMemoryUsage",'' | |||
''7 "attributePath": "get(\"used\")"'' | |||
''8 }'' | |||
'''Конфигурация пользовательского интерфейса (UI)''' | |||
та часть JSON определяет, как метрики отображаются на странице процесса. Он содержит раздел обязательных диаграмм и дополнительный раздел ключевых кнопок. Каждый раздел имеет одинаковый формат и выглядит следующим образом: | |||
''1{'' | |||
''2 "ui": {'' | |||
''3 "keymetrics" : ['' | |||
''4 {'' | |||
''5 "key" : "requestCount",'' | |||
''6 "aggregation" : "avg",'' | |||
''7 "mergeaggregation" : "sum",'' | |||
''8 "displayname" : "Requests"'' | |||
''9 }'' | |||
''10 ],'' | |||
''11 "keycharts" : [ ],'' | |||
''12 "charts": [ ]'' | |||
''13 }'' | |||
''14 }'' | |||
Раздел ключевых данных является полностью необязательным и позволяет определить до двух метрик, которые должны быть частью инфографики процесса. Он имеет следующие атрибуты: | |||
{| class="wikitable" | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|key | |||
|String | |||
|Ключ для временного ряда, который следует поместить в график. Допускаются только буквы, цифры и символы «-», «_». | |||
|- | |||
|aggregation | |||
|String | |||
|Агрегирование определяет метод агрегирования значений минут при работе с более длинными временными кадрами. Решение фиксирует значение каждые 10 секунд, но отправляет только одно совокупное значение в минуту. Здесь указывается способ агрегирования этих 10-секундных значений. | |||
|- | |||
|mergeaggregation | |||
|String | |||
|Если метрика содержит несколько размеров, это определяет способ объединения значений размеров в один размер. | |||
|- | |||
|displayname | |||
|String | |||
|Имя, отображаемое в инфографике | |||
|} | |||
Каждый раздел диаграммы имеет одинаковый формат и выглядит следующим образом: | |||
''1{'' | |||
''2 "group": "Section Name",'' | |||
''3 "title": "Chart Name",'' | |||
''4 "series": ['' | |||
''5 {'' | |||
''6 "key": "MetricName",'' | |||
''7 "aggregation": "avg",'' | |||
''8 "displayname": "Display name for metric",'' | |||
''9 "seriestype": "area"'' | |||
''10 },'' | |||
''11 {'' | |||
''12 "key": "Other Metric Name",'' | |||
''13 "aggregation": "avg",'' | |||
''14 "displayname": "Display name for metric",'' | |||
''15 "color": "rgba(42, 182, 244, 0.6)",'' | |||
''16 "seriestype": "area"'' | |||
''17 }'' | |||
''18 ]'' | |||
''19 }'' | |||
В разделе «Диаграммы» описывается, как отобразить каждую метрику в разделе «Подробности» страницы процесса (для этого выберите пункт Дополнительные сведения). | |||
Оба раздела позволяют определить массив диаграмм. Диаграмма имеет следующие обязательные атрибуты:: | |||
{| class="wikitable" | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|group | |||
|String | |||
|Имя раздела, в котором должна быть помещена диаграмма | |||
|- | |||
|title | |||
|String | |||
|Имя диаграммы | |||
|- | |||
|series | |||
|Array | |||
|Массив временных рядов и определений диаграмм. Одна диаграмма может содержать несколько метрик. | |||
|} | |||
Временной ряд имеет следующие атрибуты:: | |||
{| class="wikitable" | |||
|'''Поле''' | |||
|'''Тип''' | |||
|'''Описание''' | |||
|- | |||
|key | |||
|String | |||
|Ключ для временного ряда для диаграммы | |||
|- | |||
|displayname | |||
|String | |||
|Отображаемое имя для метрики. Перезаписывает имя отображения метрики. По умолчанию: метрическое отображаемое имя. | |||
|- | |||
|aggregation | |||
|String | |||
|Каким образом многоминутные значения должны агрегироваться в диаграммах при просмотре более длинных временных рамок. Возможные значения: SUM, AVG, MIN, MAX | |||
|- | |||
|mergeaggregation | |||
|String | |||
|Ключевые диаграммы не отображают несколько измерений. Если метрика содержит несколько размеров, это определяет способ объединения значений размеров в один размер. | |||
|- | |||
|color | |||
|String | |||
|HTML-цвет (RGB или RGBA). | |||
|- | |||
|seriestype | |||
|String | |||
|Тип диаграммы. Возможные значения: линия, область и полоса | |||
|- | |||
|rightaxis | |||
|Boolean | |||
|Если значение равно true, метрика будет размещена на правой оси, а не на левой. Следует отметить, что решение поддерживает диаграммы с двумя осями. | |||
|- | |||
|stacked | |||
|Boolean | |||
|Если true, несколько метрик укладываются друг на друга. Это работает только для диаграмм площадей и гистограмм. | |||
|} |
Текущая версия на 12:46, 5 сентября 2024
Расширения / Расширения Ключ-АСТРОМ / Расширения JMX
JMX ( Java Management Extensions ) идеально подходит для мониторинга приложений, созданных с использованием Java. С помощью Ключ-АСТРОМ вы можете отслеживать любую метрику в вашей JVM, которая предоставляется через MBean.
Режим мониторинга инфраструктуры
Расширения JMX и PMI также доступны в режиме мониторинга инфраструктуры. Их можно использовать для мониторинга любого компонента инфраструктуры и службы поддержки, написанных на Java, и получать отчеты обо всех собранных показателях с помощью Ключ-АСТРОМ.
Создайте расширение JMX
Ключ-АСТРОМ версии 1.162 и более поздних версий
- Войдите в Ключ-АСТРОМ, выберите «Настройки » > «Мониторинг » > «Отслеживаемые технологии» и нажмите «Добавить мониторинг новой технологии ». Из четырех доступных вариантов один — Monitor Java или технологии на базе WebSphere . Нажмите «Добавить расширение JMX/PMI ».
- Нажмите «Использовать редактор расширений JMX/PMI ».
- Введите имя расширения. Вы можете использовать только буквы
A-Z, a-z
, цифры0-9
или-/_
. - Добавьте источник метрик.
- Выберите одну из доступных технологий.
- В зависимости от вашего выбора редактор предложит процесс Java в качестве источника ваших показателей. Это сужает список доступных модулей MBeans или PMI, которые вы будете использовать на следующем шаге. Технология, лежащая в основе этого процесса, определяет, будете ли вы просматривать JMX MBeans или модули PMI. Нажмите «Добавить источник метрик» , чтобы использовать предложенный источник. Нажмите , чтобы выбрать другой процесс. При его выборе вы можете сузить список доступных процессов, выбрав конкретный хост или Зону управления.
Выбор процесса, хоста или зоны управления не ограничивает область мониторинга расширения. Расширения JMX/PMI контролируют все процессы Java, доступные ЕдиномуАгенту. Метрика, определенная для того же MBean и атрибута, будет также доступна в других процессах Java в вашем приложении, что может быстро исчерпать ваш собственный лимит метрики.
Вы также можете выбрать отдельные хосты, на которых будет запускаться новое расширение JMX, вместо того, чтобы запускать его глобально по всей вашей среде.
- Сразу после добавления расширения JMX перейдите в «Настройки» > «Отслеживаемые технологии » > вкладка «Пользовательские расширения» и отключите его глобально.
- Перейдите на отдельные страницы хоста, откройте настройки хоста, найдите расширение JMX и включите его.
5. Когда список метрик будет загружен, нажмите кнопку «Добавить метрику» , чтобы начать создание расширения.
Домен
Выберите домен.
Выберите ключевые свойства
Ключевые свойства фильтруют список доступных MBean-компонентов. Обратите внимание, что значения свойств могут содержать подстановочные знаки. Выберите «Точное соответствие» , чтобы фильтровать список MBeans только для записей, соответствующих точным значениям ключевых свойств.
Выберите MBean
Выберите один MBean из списка или оставьте параметр «Все соответствующие MBean» . Если сопоставлено более одного MBean, это приведет к агрегированию атрибутов всех совпадающих MBean в одну метрику. Ниже вы определите тип агрегации.
Выберите атрибут
Атрибуты, доступные в списке, являются только числовыми. Чтобы просмотреть другие атрибуты, например атрибуты типа String
, выберите «Включить нечисловые атрибуты» . Обратите внимание, что выбранные атрибуты должны быть разборчивыми для двойного или логического типа. В противном случае ЕдиныйАгент Ключ-АСТРОМ не будет собирать данные по такой метрике.
Отображаемое имя
Вы можете определить собственное отображаемое имя для метрики.
Единица
Выберите метрическую единицу измерения.
Агрегация
Выберите метод агрегирования, если вы извлекаете атрибут из нескольких совпадающих Mbeans.
Расчет
Дельта вычисляет изменение значений данного атрибута. Скорость вычисляет скорость изменений в секунду. Если вы выберете оба варианта, вы сможете преобразовать абсолютный атрибут (например, количество запросов) в скорость (например, количество запросов в секунду). Значение = атрибут/интервал запроса.
Создание расширения PMI
Создание расширения PMI очень похоже на создание расширения JMX. Модуль PMI преобразует в JMX Mbean, а статистику — в атрибуты. Все остальные настройки ведут себя соответственно.
Сохранение расширения
После добавления метрики вы по-прежнему можете редактировать или удалять ее определение. Вам необходимо нажать кнопку «Сохранить» , чтобы зарегистрировать расширение и начать сбор данных из всех процессов Java, содержащих определенные MBean-компоненты. После сохранения расширения вы не сможете редактировать или удалять метрики, поскольку таким образом мы сможем обеспечить непрерывность ваших данных. Вы по-прежнему можете добавлять новые показатели. Однако на этот раз вы не сможете выбрать базовый процесс Java, поскольку вы будете использовать процесс, в котором расширение уже развернуто.
Настройка вашего расширения
Расширения Ключ-АСТРОМ JMX имеют широкие возможности настройки, выходящие за рамки возможностей редактора. Вы можете скачать свое расширение и отредактировать его файл JSON, в котором описываются ваши метрики JMX и то, как вы хотите их отображать. Справку и примеры см. в разделе «Настройка плагинов JMX» .
Просмотр метрик JMX в Ключ-АСТРОМ
Метрики JMX доступны для всех процессов на основе Java, контролируемых ЕдинымАгентом.
После загрузки вашего расширения Ключ-АСТРОМ автоматически начинает запрашивать определенные метрики для всех процессов Java. Чтобы найти метрики, перейдите на соответствующую страницу процесса и нажмите «Подробнее» .
Например, для расширения с именем HornetQ
перейдите к процессу, который вы выбрали при создании расширения, нажмите « Дополнительные сведения» , а затем выберите вкладку HornetQ , имя которой автоматически соответствует имени расширения. Там вы найдете все определенные метрики.
Не видите определенный показатель?
Мониторинг JMX очень динамичен. Если определенная метрика не существует в вашей JVM, это не ошибка — метрика просто недоступна.
Пользовательские метрики расширения JMX/PMI
Вы можете заметить, что количество метрик в plugin.json
файле вашего расширения JMX/PMI отличается от количества выставленных счетов специальных метрик. Это связано с тем, что расширения JMX/PMI предоставляют «разделения», которые можно использовать для определения дополнительных измерений для сообщаемых показателей. Для каждого значения выбранного свойства во время выполнения создается отдельная метрика временного ряда. Фактическое количество метрик таймсерий зависит от количества различных значений выбранного свойства.
В следующем примере показано, как определить метрику, которая предоставляет несколько временных рядов с одной метрикой:
"metrics": [
{
"timeseries": {
"key": "XY.Size",
"unit": "Count",
"displayname": "Queue Consumer Count",
"dimensions": [
"rx_pid",
"name"
]
}
"source": {
"domain": "com.sample",
"keyProperties": {
"type": "XY",
"name": "*"
},
"attribute": "Size",
"splitting": {
"name": "name",
"type": "keyProperty",
"keyProperty": "name"
}
}
}
]
В этом примере MBeans com.sample:type=XY,name=A
и com.sample:type=XY,name=B
приведет к получению двух метрик временных рядов ( A
и B
).
Поскольку такие значения обычно заранее не известны и могут быть изменены, это может привести к неожиданно большому количеству потребляемых специальных метрик . Если значения свойства известны заранее или интерес представляют только некоторые значения, мы рекомендуем указать одну метрику для каждого значения и не использовать разделение.
Ограничение метрик для расширения JMX
Для каждого расширения JMX может быть не более 5,000
метрик. Это ограничение необходимо для предотвращения перегрузки системы мониторинга неэффективными или перегруженными метриками расширениями.
Настройка расширений JMX
JMX расширения определяются с помощью файлов JSON.
Определение расширения состоит из трех основных элементов: метаданных (metadata), метрик (metrics) и пользовательского интерфейса (UI).
1 Основной формат следующий:
2 {
3 "version": "1.0",
4 "name": "custom.jmx.hornetq",
5 "type": "JMX",
6 "entity": "PROCESS_GROUP_INSTANCE",
7 "metricGroup": "tech.HornetQ",
8 "configUI" : {
9 "displayName": "HornetQ JMX"
10 },
11 "metrics": [ ],
12 "ui": {
13 "keycharts" : [ ],
14 "charts": [ ]
15 }
16 }
Метаданные
Каждое расширение JMX имеет следующие обязательные свойства:
Поле | Тип | Описание |
version | String | Версия расширения, в формате 1.23, должна быть обновлена каждый раз, когда обновляется определение расширения. |
name | String | Уникальное имя расширения в формате пакета Java. Имена пользовательских расширений JMX должны соответствовать правилу custom.jmx.name. Вы можете использовать только буквы, цифры и символы "-", "_". Например, custom.jmx.newPlugin-Ver2. |
type | String | Всегда используйте JMX. |
entity | String | Всегда используйте PROCESS_GROUP_INSTANCE |
metricGroup | String | Метрическая группа используется для группировки пользовательских метрик в иерархическое пространство имен, где разные источники, например, несколько расширений, могут вносить свой вклад. Кроме того, метрическая группа становится основной частью ключа метрики. Поэтому, однажды определенная, она не может быть изменена. Разрешенные символы - буквы, цифры, "-", "_" символы. |
configUI.displayName | String | Читаемое человеком название расширения. Это название отображается на странице расширений мониторинга после загрузки расширения. |
Метрики
Эта часть JSON определяет, какие метрики собираются расширением. Каждая метрика определяется JSON в формате, аналогичном следующему:
1{
2 "timeseries": {
3 "key": "Queue.ConsumerCount",
4 "unit": "Count",
5 "displayname": "Queue Consumer Count",
6 "dimensions": [
7 "rx_pid"
8 ]
9 },
10 "alert_settings": [
11 {
12 "alert_id": "too_many_consumers",
13 "event_type": "PERFORMANCE_EVENT",
14 "event_name": "Too many consumers",
15 "description": "The {metricname} of {severity} is {alert_condition} the threshold of {threshold}",
16 "threshold": 35.0,
17 "alert_condition": "ABOVE",
18 "samples":5,
19 "violating_samples":3,
20 "dealerting_samples":5,
21 "value_extractor": "MAX"
22 }
23 ],
24 "source": {
25 "domain": "org.hornetq",
26 "keyProperties": {
27 "type": "Queue"
28 },
29 "attribute": "ConsumerCount"
30 }
31 }
Временной ряд
Эта часть определяет метаданные метрики.
Поле | Тип | Описание |
key | String | Название метрики. Должно быть уникальным в рамках данного расширения. Разрешены только буквы, цифры и символы "-" и "_". |
unit | String | Метрическая единица. Должна быть одной из доступных описанных ниже единиц. |
dimensions | String array | Должен содержать rxpid в индексе 0. Это гарантирует, что атрибуты JMX получают идентификатор системного процесса (PID) в качестве измерения. Дополнительные измерения могут использоваться, например, для предоставления одной метрики на каждое значение свойства ключа JMX ObjectName (например, QueueName, ThreadPoolName или ConnectionPoolName). Разрешены только буквы, цифры и символы "-" и "". |
displayname | String | Имя отображения метрики, представляющее метрику в решение. Это поле обязательно. Оно должно отличаться от ключа метрики. |
Доступные единицы:
NanoSecond, MicroSecond, MilliSecond, Second, Byte, KiloByte, MegaByte, BytePerSecond, BytePerMinute, KiloBytePerSecond, KiloBytePerMinute, MegaBytePerSecond, MegaBytePerMinute, Count, PerSecond, PerMinute
Настройки оповещений
Эта часть определяет конфигурацию одного или нескольких оповещений для заданного временного ряда..
Поле | Тип | Описание |
alert_id | String | Уникальный идентификатор оповещения. Разрешены только буквы, цифры и символы "-" и "_". |
event_type | String | Разрешенные типы: PERFORMANCE_EVENT, ERROR_EVENT, AVAILABILITY_EVENT. |
description | String | Описание определяет сообщение оповещения, в сообщении, могут быть использованы следующие метки: {threshold} значение порога, который был нарушен, {severity} важность, {entityname} имя объекта, {violating_samples} минуты превышения в интервале оценки, {dimensions} разбиения\сплиты, {alert_condition} отображает метку условия наступления - выше/ниже порога. |
event_name | String | Название события, отображаемое на страницах пользовательского интерфейса. |
threshold | Float | Значение порога |
alert_condition | String | Условие выше (ABOVE) или ниже (BELOW). |
samples | Integer | Размер интервала в минутах, в котором подсчитываются нарушающие образцы. |
violating_samples | Integer | Количество минут, в которых, порог превышен |
dealerting_samples | Integer | Количество минут, в которы, порог вернулся в норму |
value_extractor | String | Решение фиксирует значение каждые 10 секунд, но отправляет только одно совокупное значение в минуту. Здесь указывается способ агрегирования этих 10-секундных значений. Возможные значения: MIN, MAX, SUM, COUNT, AVG, MEDIAN, P90. Значение по умолчанию - AVG |
Источник
Эта часть определяет способ сбора метрики с помощью JMX. Для всех метрик необходимы следующие атрибуты:
Поле | Тип | Описание |
domain | String | Доменное имя MBean |
keyProperties | Key, Value pairs | Ключевые свойства MBean. Значения могут содержать подстановочные знаки (*) |
attribute | String | Имя атрибута, содержащего метрическое значение. |
Необязательные атрибуты:
attributePath | String | См. раздел составные данные |
allowAdditionalKeys | Boolean | Если значение равно false, свойство keyProperties должно точно совпадать. Дополнительные ключи в имени приведут к несоответствию. Если true, то дополнительные ключевые свойства, отличные от указанных в «keyProperties», разрешены и игнорируются. |
calculateDelta | bool | Если true, вычислите изменение значений данного атрибута. Значение = атрибут (t) - атрибут (t-1). Это полезно для монотонно возрастающих значений. |
calculateRate | bool | Если true, вычислите частоту изменений в секунду. Это используется в комбинации с calculateDelta для преобразования абсолютного атрибута (например, Количество запросов) к ставке (например, запросов в секунду). Значение = атрибут/интервал запроса |
aggregation | String | Он используется для агрегирования нескольких значений, если более 1 MBean соответствует фильтру свойств домена и ключа. Возможные значения: SUM, AVG, MIN, MAX |
splitting | Object | Установить Разбивку\разделение |
Разбивка
Разделение можно использовать для определения дополнительного размера для метрики. Это измерение должно быть определено в свойстве измерения временных рядов и свойстве разделения источника.
1"splitting": {
2 "name": "name",
3 "type": "keyProperty",
4 "keyProperty": "name"
5 }
Для определения нескольких разделений используйте следующий формат:
1"splittings":[
2 {
3 "name":"name",
4 "type":"keyProperty",
5 "keyProperty":"name"
6 },
7 {
8 "name":"context",
9 "type":"keyProperty",
10 "keyProperty":"context"
11 }
12]
Для каждого разделения должны присутствовать следующие атрибуты:
Поле | Тип | Описание |
name | String | Должно соответствовать имени измерения, определенному для временных рядов |
type | String | Всегда должно быть keyProperty |
keyProperty | String | Определяет ключевое свойство ObjectName MBean, используемое для разбиения/разделения. |
Пример метрики с дополнительным разделением (splitting)
В следующем примере показано, как определить метрику, которая обеспечивает несколько временных интервалов в пределах одной метрики:
1{
2 "timeseries": {
3 "key": "XY.Size",
4 "unit": "Count",
5 "displayname": "Queue Consumer Count",
6 "dimensions": [
7 "rx_pid",
8 "name"
9 ]
10 }
11 "source": {
12 "domain": "com.sample",
13 "keyProperties": {
14 "type": "XY",
15 "name": "*"
16 },
17 "attribute": "Size",
18 "splitting": {
19 "name": "name",
20 "type": "keyProperty",
21 "keyProperty": "name"
22 }
23 }
24 }
Например, MBeans com.sample: type = XY, name = A и com.sample: type = XY, name = B приведет к появлению двух временных рядов: первого для «A» и второго для «B».
Составные данные:
Чтобы извлечь значения отдельных ключей, возвращенных атрибутом как тип Составные данные - CompositeData, необходимо использовать механизм attriburePath и указать на интересующий ключ.
Например, предположим, что необходимо извлечь значение used из атрибута HeapMemureUsage. HeapMemureUsage является типом CompositeData, который возвращает следующий список пар значение-ключ:
1{
2 committed: integer,
3 init: integer,
4 max: integer,
5 used: integer
6}
Определите метрику, которая указывает на MBean с атрибутом HeapMemityUsage, и в разделе источника укажите attriburePath на используемый ключ. Например:
1"source": {
2 "domain": "java.lang",
3 "keyProperties": {
4 "type": "Memory",
5 },
6 "attribute": "HeapMemoryUsage",
7 "attributePath": "get(\"used\")"
8 }
Конфигурация пользовательского интерфейса (UI)
та часть JSON определяет, как метрики отображаются на странице процесса. Он содержит раздел обязательных диаграмм и дополнительный раздел ключевых кнопок. Каждый раздел имеет одинаковый формат и выглядит следующим образом:
1{
2 "ui": {
3 "keymetrics" : [
4 {
5 "key" : "requestCount",
6 "aggregation" : "avg",
7 "mergeaggregation" : "sum",
8 "displayname" : "Requests"
9 }
10 ],
11 "keycharts" : [ ],
12 "charts": [ ]
13 }
14 }
Раздел ключевых данных является полностью необязательным и позволяет определить до двух метрик, которые должны быть частью инфографики процесса. Он имеет следующие атрибуты:
Поле | Тип | Описание |
key | String | Ключ для временного ряда, который следует поместить в график. Допускаются только буквы, цифры и символы «-», «_». |
aggregation | String | Агрегирование определяет метод агрегирования значений минут при работе с более длинными временными кадрами. Решение фиксирует значение каждые 10 секунд, но отправляет только одно совокупное значение в минуту. Здесь указывается способ агрегирования этих 10-секундных значений. |
mergeaggregation | String | Если метрика содержит несколько размеров, это определяет способ объединения значений размеров в один размер. |
displayname | String | Имя, отображаемое в инфографике |
Каждый раздел диаграммы имеет одинаковый формат и выглядит следующим образом:
1{
2 "group": "Section Name",
3 "title": "Chart Name",
4 "series": [
5 {
6 "key": "MetricName",
7 "aggregation": "avg",
8 "displayname": "Display name for metric",
9 "seriestype": "area"
10 },
11 {
12 "key": "Other Metric Name",
13 "aggregation": "avg",
14 "displayname": "Display name for metric",
15 "color": "rgba(42, 182, 244, 0.6)",
16 "seriestype": "area"
17 }
18 ]
19 }
В разделе «Диаграммы» описывается, как отобразить каждую метрику в разделе «Подробности» страницы процесса (для этого выберите пункт Дополнительные сведения).
Оба раздела позволяют определить массив диаграмм. Диаграмма имеет следующие обязательные атрибуты::
Поле | Тип | Описание |
group | String | Имя раздела, в котором должна быть помещена диаграмма |
title | String | Имя диаграммы |
series | Array | Массив временных рядов и определений диаграмм. Одна диаграмма может содержать несколько метрик. |
Временной ряд имеет следующие атрибуты::
Поле | Тип | Описание |
key | String | Ключ для временного ряда для диаграммы |
displayname | String | Отображаемое имя для метрики. Перезаписывает имя отображения метрики. По умолчанию: метрическое отображаемое имя. |
aggregation | String | Каким образом многоминутные значения должны агрегироваться в диаграммах при просмотре более длинных временных рамок. Возможные значения: SUM, AVG, MIN, MAX |
mergeaggregation | String | Ключевые диаграммы не отображают несколько измерений. Если метрика содержит несколько размеров, это определяет способ объединения значений размеров в один размер. |
color | String | HTML-цвет (RGB или RGBA). |
seriestype | String | Тип диаграммы. Возможные значения: линия, область и полоса |
rightaxis | Boolean | Если значение равно true, метрика будет размещена на правой оси, а не на левой. Следует отметить, что решение поддерживает диаграммы с двумя осями. |
stacked | Boolean | Если true, несколько метрик укладываются друг на друга. Это работает только для диаграмм площадей и гистограмм. |