<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_JMX</id>
	<title>Справка о источнике данных JMX - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ruscomtech.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_JMX"/>
	<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_JMX&amp;action=history"/>
	<updated>2026-04-13T14:10:06Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_JMX&amp;diff=5352&amp;oldid=prev</id>
		<title>IKuznetsov: Новая страница: «Это общее описание расширения файла '''YAML''' на основе источника данных '''JMX''' и способов об...»</title>
		<link rel="alternate" type="text/html" href="https://doc.ruscomtech.ru/index.php?title=%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BE_%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_JMX&amp;diff=5352&amp;oldid=prev"/>
		<updated>2025-06-23T18:34:37Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «Это общее описание расширения файла &amp;#039;&amp;#039;&amp;#039;YAML&amp;#039;&amp;#039;&amp;#039; на основе источника данных &amp;#039;&amp;#039;&amp;#039;JMX&amp;#039;&amp;#039;&amp;#039; и способов об...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Это общее описание расширения файла '''YAML''' на основе источника данных '''JMX''' и способов объявления показателей и измерений, которые вы хотели бы собирать с помощью вашего расширения.&lt;br /&gt;
&lt;br /&gt;
== Метрические значения ==&lt;br /&gt;
Значение метрики может поступать из разных источников.&lt;br /&gt;
&lt;br /&gt;
Наиболее распространенным источником является числовой атрибут '''JMX MBean''':&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|metrics:&lt;br /&gt;
&lt;br /&gt;
  - key: com.example.somekey&lt;br /&gt;
&lt;br /&gt;
    value: attribute:ThreadCount&lt;br /&gt;
|}&lt;br /&gt;
Это будет искать атрибут с именем &amp;lt;code&amp;gt;ThreadCount&amp;lt;/code&amp;gt;. Возвращаемое значение должно быть либо числовым (любой подкласс &amp;lt;code&amp;gt;java.lang.Number&amp;lt;/code&amp;gt;, например &amp;lt;code&amp;gt;Integer&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Long&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Double&amp;lt;/code&amp;gt;), либо &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt; (преобразованным в &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; и  &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''JMX''' позволяет определять атрибуты с комплексными нечисловыми типами. Из такого нечислового значения атрибута можно извлечь числовое значение. Для этого требуется указать, к каким методам или полям следует получить доступ.&lt;br /&gt;
&lt;br /&gt;
Например:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|metrics:&lt;br /&gt;
&lt;br /&gt;
  - key: com.example.somekey&lt;br /&gt;
&lt;br /&gt;
    value:&lt;br /&gt;
&lt;br /&gt;
      attribute: SomeNonNumericAttribute&lt;br /&gt;
&lt;br /&gt;
      accessor: getSomeNumericValue()&lt;br /&gt;
|}&lt;br /&gt;
Подробное описание синтаксиса см . в разделе '''Синтаксис доступа''' ниже.&lt;br /&gt;
&lt;br /&gt;
Особым случаем является использование всегда одного и того же постоянного значения вместо запроса атрибута:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|metrics:&lt;br /&gt;
&lt;br /&gt;
  - key: com.example.somekey&lt;br /&gt;
&lt;br /&gt;
    value: const:1&lt;br /&gt;
|}&lt;br /&gt;
Если &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; соответствует одному '''MBean''', эта метрика всегда будет выдавать значение &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Это можно использовать для сообщения только о наличии определенного '''MBean'''. Если запрос соответствует нескольким '''MBean''', эта метрика будет выдавать значение, соответствующее количеству совпадений '''MBean'''.&lt;br /&gt;
&lt;br /&gt;
== Индивидуальные размеры ==&lt;br /&gt;
Каждое пользовательское измерение состоит из константы &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt;. Значение может поступать из разных источников.&lt;br /&gt;
&lt;br /&gt;
Самый простой случай — задать значение измерения как постоянную строку:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|dimensions:&lt;br /&gt;
&lt;br /&gt;
  - key: k1&lt;br /&gt;
&lt;br /&gt;
    value: const:constant_value&lt;br /&gt;
|}&lt;br /&gt;
Это создаст метрику, в которой измерение &amp;lt;code&amp;gt;k1&amp;lt;/code&amp;gt; всегда имеет значение &amp;lt;code&amp;gt;constant_value&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значение свойства ключа имени объекта '''MBean''' можно использовать в качестве значения измерения:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|query: java.lang:type=GarbageCollector,name=*&lt;br /&gt;
&lt;br /&gt;
dimensions:&lt;br /&gt;
&lt;br /&gt;
  - key: k1&lt;br /&gt;
&lt;br /&gt;
    value: property:name&lt;br /&gt;
|}&lt;br /&gt;
Это создаст метрику, где измерение &amp;lt;code&amp;gt;k1&amp;lt;/code&amp;gt; соответствует значению ключевого свойства &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;. Например, '''MBean''' &amp;lt;code&amp;gt;java.lang:type=GarbageCollector,name=YoungGen&amp;lt;/code&amp;gt; создаст метрику, где измерение &amp;lt;code&amp;gt;k1&amp;lt;/code&amp;gt; имеет значение &amp;lt;code&amp;gt;YoungGen&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в процессе задействовано 3 разных сборщика мусора, создаются метрики с 3 разными значениями измерений, которые можно построить на независимой диаграмме.&lt;br /&gt;
&lt;br /&gt;
Атрибут '''MBean''' также может использоваться в качестве значения измерения.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|query: java.lang:type=Compilation&lt;br /&gt;
&lt;br /&gt;
dimensions:&lt;br /&gt;
&lt;br /&gt;
  - key: k1&lt;br /&gt;
&lt;br /&gt;
    value: attribute:Name&lt;br /&gt;
|}&lt;br /&gt;
Это создаст метрику, где измерение &amp;lt;code&amp;gt;k1&amp;lt;/code&amp;gt; соответствует значению атрибута &amp;lt;code&amp;gt;Name&amp;lt;/code&amp;gt;. В настоящее время поддерживаются только неизменяемые атрибуты. Атрибут для определенного '''MBean''' запрашивается только один раз, когда '''MBean''' впервые обнаруживается ЕдинымАгентом.&lt;br /&gt;
&lt;br /&gt;
Подобно значениям метрик, можно извлечь значение измерения из сложного атрибута, используя выражение доступа:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|query: java.lang:type=Compilation&lt;br /&gt;
&lt;br /&gt;
dimensions:&lt;br /&gt;
&lt;br /&gt;
  - key: k1&lt;br /&gt;
&lt;br /&gt;
    value:&lt;br /&gt;
&lt;br /&gt;
      attribute: SomeAttribute&lt;br /&gt;
&lt;br /&gt;
      accessor: getName()&lt;br /&gt;
|}&lt;br /&gt;
Этот метод будет искать атрибут с именем &amp;lt;code&amp;gt;SomeAttribute&amp;lt;/code&amp;gt;, вызывать его &amp;lt;code&amp;gt;getName&amp;lt;/code&amp;gt; и использовать возвращаемое значение в качестве значения для измерения &amp;lt;code&amp;gt;k1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getSomeNumericValue()&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вызов метода &amp;lt;code&amp;gt;getSomeNumericValue&amp;lt;/code&amp;gt; без параметров.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getSomeNumericValue&amp;lt;/code&amp;gt;&lt;br /&gt;
|Скобки — необязательные методы без параметров.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getA().getB()&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вызов метода с именем &amp;lt;code&amp;gt;getA&amp;lt;/code&amp;gt;, затем для возвращаемого им значения вызов метод с именем &amp;lt;code&amp;gt;getB&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getA(1)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вызов метода &amp;lt;code&amp;gt;getA&amp;lt;/code&amp;gt; с целочисленным аргументом &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getA(&amp;quot;x&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вызов метода &amp;lt;code&amp;gt;getA&amp;lt;/code&amp;gt; со строковым аргументом &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getA(1, &amp;quot;x&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вызов метода &amp;lt;code&amp;gt;getA&amp;lt;/code&amp;gt; с двумя аргументами.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;getA()[1]&amp;lt;/code&amp;gt;&lt;br /&gt;
|Вызов метода с именем &amp;lt;code&amp;gt;getA&amp;lt;/code&amp;gt;, затем из возвращаемого значения извлечение значения с индексом 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Переменные расширения ==&lt;br /&gt;
Переменные расширения можно использовать, чтобы разрешить пользователям расширения отслеживать только определенные '''MBean'''-компоненты:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|vars:&lt;br /&gt;
&lt;br /&gt;
  - id: gc_name_filter&lt;br /&gt;
&lt;br /&gt;
    displayName: Garbage Collector Name&lt;br /&gt;
&lt;br /&gt;
    type: text&lt;br /&gt;
&lt;br /&gt;
jmx:&lt;br /&gt;
&lt;br /&gt;
  groups:&lt;br /&gt;
&lt;br /&gt;
    - group: jvm&lt;br /&gt;
&lt;br /&gt;
      subgroups:&lt;br /&gt;
&lt;br /&gt;
        - subgroup: basic&lt;br /&gt;
&lt;br /&gt;
          query: java.lang:type=GarbageCollector&lt;br /&gt;
&lt;br /&gt;
          queryFilters:&lt;br /&gt;
&lt;br /&gt;
            - field: name&lt;br /&gt;
&lt;br /&gt;
              filter: var:gc_name_filter&lt;br /&gt;
&lt;br /&gt;
          dimensions:&lt;br /&gt;
&lt;br /&gt;
            - key: k1&lt;br /&gt;
&lt;br /&gt;
              value: property:name&lt;br /&gt;
&lt;br /&gt;
          metrics:&lt;br /&gt;
&lt;br /&gt;
            - key: com.example.jmx.var&lt;br /&gt;
&lt;br /&gt;
              type: count&lt;br /&gt;
&lt;br /&gt;
              value: attribute:CollectionTime&lt;br /&gt;
|}&lt;br /&gt;
Это создает переменную, которая называется &amp;lt;code&amp;gt;gc_name_filter&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Garbage Collector Name&amp;lt;/code&amp;gt; в пользовательском интерфейсе. Значение переменной будет использоваться для выбора определенного '''MBean'''. Например, если значение переменной равно &amp;lt;code&amp;gt;YoungGen&amp;lt;/code&amp;gt;, то полный запрос имени объекта будет &amp;lt;code&amp;gt;java.lang:type=GarbageCollector,name=YoungGen&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Каждая конфигурация мониторинга может выбрать определенное значение для этой переменной. Чтобы гарантировать, что несколько конфигураций мониторинга с разными значениями переменных не будут перепутаны в пользовательском интерфейсе, рекомендуется также добавить измерение для свойства &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, как показано выше.&lt;/div&gt;</summary>
		<author><name>IKuznetsov</name></author>
	</entry>
</feed>