Расширения JMX

Материал из Документация Ключ-АСТРОМ

Расширения / Расширения Ключ-АСТРОМ / Расширения JMX

JMX ( Java Management Extensions ) идеально подходит для мониторинга приложений, созданных с использованием Java. С помощью Ключ-АСТРОМ вы можете отслеживать любую метрику в вашей JVM, которая предоставляется через MBean.

Режим мониторинга инфраструктуры

Расширения JMX и PMI также доступны в режиме мониторинга инфраструктуры. Их можно использовать для мониторинга любого компонента инфраструктуры и службы поддержки, написанных на Java, и получать отчеты обо всех собранных показателях с помощью Ключ-АСТРОМ.

Создайте расширение JMX

Ключ-АСТРОМ версии 1.162 и более поздних версий

  1. Войдите в Ключ-АСТРОМ, выберите «Настройки » > «Мониторинг » > «Отслеживаемые технологии» и нажмите «Добавить мониторинг новой технологии ». Из четырех доступных вариантов один — Monitor Java или технологии на базе WebSphere . Нажмите «Добавить расширение JMX/PMI ».
  2. Нажмите «Использовать редактор расширений JMX/PMI ».
  3. Введите имя расширения. Вы можете использовать только буквы A-Z, a-z, цифры 0-9или -/_.
  4. Добавьте источник метрик.
  • Выберите одну из доступных технологий.
  • В зависимости от вашего выбора редактор предложит процесс Java в качестве источника ваших показателей. Это сужает список доступных модулей MBeans или PMI, которые вы будете использовать на следующем шаге. Технология, лежащая в основе этого процесса, определяет, будете ли вы просматривать JMX MBeans или модули PMI. Нажмите «Добавить источник метрик» , чтобы использовать предложенный источник. Нажмите , чтобы выбрать другой процесс. При его выборе вы можете сузить список доступных процессов, выбрав конкретный хост или Зону управления.

Выбор процесса, хоста или зоны управления не ограничивает область мониторинга расширения. Расширения JMX/PMI контролируют все процессы Java, доступные ЕдиномуАгенту. Метрика, определенная для того же MBean и атрибута, будет также доступна в других процессах Java в вашем приложении, что может быстро исчерпать ваш собственный лимит метрики.

Вы также можете выбрать отдельные хосты, на которых будет запускаться новое расширение JMX, вместо того, чтобы запускать его глобально по всей вашей среде.

  1. Сразу после добавления расширения JMX перейдите в «Настройки» > «Отслеживаемые технологии » > вкладка «Пользовательские расширения» и отключите его глобально.
  2. Перейдите на отдельные страницы хоста, откройте настройки хоста, найдите расширение 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. Чтобы найти метрики, перейдите на соответствующую страницу процесса и нажмите «Подробнее» .

Jmx1.png

Например, для расширения с именем HornetQперейдите к процессу, который вы выбрали при создании расширения, нажмите « Дополнительные сведения» , а затем выберите вкладку HornetQ , имя которой автоматически соответствует имени расширения. Там вы найдете все определенные метрики.

Jmx2.png

Не видите определенный показатель?

Мониторинг 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, несколько метрик укладываются друг на друга. Это работает только для диаграмм площадей и гистограмм.