<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документация Proto Observability Platform – JMX</title><link>/docs/tags/jmx/</link><description>Recent content in JMX on Документация Proto Observability Platform</description><generator>Hugo -- gohugo.io</generator><language>ru</language><atom:link href="/docs/tags/jmx/index.xml" rel="self" type="application/rss+xml"/><item><title>Instrumentation: Сбор кастомных JMX-метрик в Proto Observability</title><link>/docs/instrumentation/infra/jmx/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/instrumentation/infra/jmx/</guid><description>
&lt;p>На этой странице:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#%d0%b2%d0%b2%d0%b5%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5">Введение&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b2%d1%8b%d0%b1%d0%be%d1%80-%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1%d0%b0-%d1%81%d0%b1%d0%be%d1%80%d0%b0">Выбор способа сбора&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-1-%d1%81%d0%b1%d0%be%d1%80-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-java-%d1%82%d1%80%d0%b5%d0%b9%d1%81%d0%b5%d1%80">Способ 1: сбор через Java-трейсер&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b5%d0%b4%d0%b2%d0%b0%d1%80%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d1%82%d1%80%d0%b5%d0%b1%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f">Предварительные требования&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%84%d0%b0%d0%b9%d0%bb-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d0%b8-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">Файл конфигурации метрик&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%b0-%d0%ba-%d1%82%d1%80%d0%b5%d0%b9%d1%81%d0%b5%d1%80%d1%83">Подключение файла к трейсеру&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-docker">Пример: Docker&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-kubernetes">Пример: Kubernetes&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d1%8b-jmx-%d1%81%d0%b1%d0%be%d1%80%d0%b0-%d0%b2-%d1%82%d1%80%d0%b5%d0%b9%d1%81%d0%b5%d1%80%d0%b5">Параметры JMX-сбора в трейсере&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-2-%d1%81%d0%b1%d0%be%d1%80-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-protoobp-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82">Способ 2: сбор через ProtoOBP Агент&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d0%b2%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-jmx-remote-%d0%b2-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b8">Включение JMX Remote в приложении&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b8-%d0%bd%d0%b0-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82%d0%b5">Конфигурация проверки на агенте&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b5%d1%81%d0%bb%d0%b8-%d0%b0%d0%b3%d0%b5%d0%bd%d1%82-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d0%ba%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d0%b2-%d0%b2%d0%b8%d0%b4%d0%b5-docker-%d0%ba%d0%be%d0%bd%d1%82%d0%b5%d0%b9%d0%bd%d0%b5%d1%80%d0%b0">Если агент запускается в виде Docker контейнера&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d1%8b-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d1%8f-%d0%ba-jvm">Параметры подключения к JVM&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%b8%d0%bd%d1%82%d0%b0%d0%ba%d1%81%d0%b8%d1%81-%d0%be%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d1%8f-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba-conf">Синтаксис описания метрик (&lt;code>conf&lt;/code>)&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d1%84%d0%b8%d0%bb%d1%8c%d1%82%d1%80%d1%8b-include-%d0%b8-exclude">Фильтры &lt;code>include&lt;/code> и &lt;code>exclude&lt;/code>&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%be%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%b8%d0%b5-%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%be%d0%b2-%d0%b8-%d1%82%d0%b8%d0%bf%d1%8b-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">Описание атрибутов и типы метрик&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bb%d0%b5%d0%b9%d0%b1%d0%bb%d1%8b-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">Лейблы метрик&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%81%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%bd%d1%8b%d0%b5-%d0%b0%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d1%8b">Составные атрибуты&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d0%b8%d0%bc%d0%b5%d0%bd%d0%b0-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba-%d0%b2-%d0%b8%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%b5-proto-obp">Имена метрик в интерфейсе Proto OBP&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%be%d0%bb%d0%b8%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">Ограничение на количество метрик&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%b8-%d0%b4%d0%b8%d0%b0%d0%b3%d0%bd%d0%be%d1%81%d1%82%d0%b8%d0%ba%d0%b0">Проверка и диагностика&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="введение">Введение&lt;/h2>
&lt;p>Java-приложения публикуют внутреннее состояние через &lt;strong>JMX&lt;/strong> — в виде атрибутов
MBean&amp;rsquo;ов. Помимо стандартных &lt;a href="../../tracing/java/#%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba%d0%b8-jvm">метрик JVM&lt;/a> (heap, GC, потоки)
Proto Observability Platform может собирать &lt;strong>любые&lt;/strong> атрибуты MBean&amp;rsquo;ов: размеры
очередей, счётчики бизнес-операций, состояние пулов, метрики Micrometer /
Dropwizard Metrics, экспортируемые в JMX, и т. д.&lt;/p>
&lt;p>Сбор выполняет встроенный сборщик JMX-метрик, который есть и в Java-трейсере
ProtoOBP, и в ProtoOBP Агенте. В обоих случаях набор собираемых метрик задаётся
YAML-конфигурацией одного и того же формата: списком фильтров по домену, имени
bean&amp;rsquo;а и имени атрибута.&lt;/p>
&lt;h2 id="выбор-способа-сбора">Выбор способа сбора&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>Через Java-трейсер&lt;/th>
&lt;th>Через Агент&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Требуется &lt;code>-javaagent&lt;/code> в приложении&lt;/td>
&lt;td>да&lt;/td>
&lt;td>нет&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Требуется включённый JMX Remote (порт, &lt;code>java.rmi.server.hostname&lt;/code>)&lt;/td>
&lt;td>нет — подключение внутри JVM (&lt;code>jvm_direct&lt;/code>)&lt;/td>
&lt;td>да&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Где лежит конфигурация метрик&lt;/td>
&lt;td>рядом с приложением (образ, ConfigMap, файловая система пода)&lt;/td>
&lt;td>на хосте агента (&lt;code>conf.d&lt;/code>) или в лейблах контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Автоматическая привязка к сервису (&lt;code>service&lt;/code>)&lt;/td>
&lt;td>да, берётся из конфигурации трейсера&lt;/td>
&lt;td>задаётся тегами вручную&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Подходит для приложений без трейсера (legacy, сторонние JVM)&lt;/td>
&lt;td>нет&lt;/td>
&lt;td>да&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Рекомендация:&lt;/strong> если приложение уже инструментировано Java-трейсером ProtoOBP —
используйте &lt;a href="#%d1%81%d0%bf%d0%be%d1%81%d0%be%d0%b1-1-%d1%81%d0%b1%d0%be%d1%80-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-java-%d1%82%d1%80%d0%b5%d0%b9%d1%81%d0%b5%d1%80">способ 1&lt;/a>: не нужно открывать
JMX-порт наружу, а метрики автоматически получают теги сервиса. Способ 2
используйте для JVM без трейсера, а также если конфигурацию метрик удобнее
держать централизованно на агенте.&lt;/p>
&lt;h2 id="способ-1-сбор-через-java-трейсер">Способ 1: сбор через Java-трейсер&lt;/h2>
&lt;h3 id="предварительные-требования">Предварительные требования&lt;/h3>
&lt;ol>
&lt;li>К приложению подключён &lt;a href="../../tracing/java/#%d1%83%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%ba%d0%b0-java-%d1%82%d1%80%d0%b5%d0%b9%d1%81%d0%b5%d1%80%d0%b0-protoobp">Java-трейсер ProtoOBP&lt;/a>.&lt;/li>
&lt;li>Сбор JMX-метрик в трейсере включён (включён по умолчанию, см.
&lt;code>POBP_JMXFETCH_ENABLED&lt;/code>).&lt;/li>
&lt;li>Трейсер может отправлять метрики агенту по протоколу DogStatsD (UDP, порт 8125
на агенте). Если агент работает в контейнере, установите на приложении
&lt;code>POBP_DOGSTATSD_NON_LOCAL_TRAFFIC=true&lt;/code>, а на агенте — откройте порт 8125
(в Kubernetes — как host port).&lt;/li>
&lt;/ol>
&lt;h3 id="файл-конфигурации-метрик">Файл конфигурации метрик&lt;/h3>
&lt;p>Создайте каталог (например &lt;code>/etc/protoobp/jmx/&lt;/code>) и в нём файл
&lt;code>custom-metrics.yaml&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">init_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">is_jmx&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Современные имена GC-метрик (jvm_gc_minor_collection_count и т. п.)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">new_gc_metrics&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">instances&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Обязательно: трейсер собирает метрики только из instance&amp;#39;ов&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># с jvm_direct: true — подключение идёт внутри той же JVM.&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">jvm_direct&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">my_app_custom_metrics&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">conf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Размер очереди заказов: com.example.app:type=OrderQueue -&amp;gt; Size&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">include&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">domain&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">com.example.app&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">bean&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;com.example.app:type=OrderQueue&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attribute&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">Size&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.orders.queue_size&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gauge&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">RejectedCount&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.orders.rejected&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">monotonic_count&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Все пулы соединений приложения; имя пула станет лейблом `pool`&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">include&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">domain&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">com.example.app&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">bean_regex&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;com\.example\.app:type=ConnectionPool,pool=.*&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attribute&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">ActiveConnections&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.pool.active&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gauge&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">IdleConnections&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.pool.idle&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gauge&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">jvm_direct&lt;/h4>
Instance без &lt;code>jvm_direct: true&lt;/code> трейсер пропустит, записав в лог
&lt;code>Skipping instance ... targetDirectInstances=true != jvm_direct=false&lt;/code>.
Параметры &lt;code>host&lt;/code>, &lt;code>port&lt;/code>, &lt;code>user&lt;/code>, &lt;code>password&lt;/code> в этом режиме не используются.
&lt;/div>
&lt;h3 id="подключение-файла-к-трейсеру">Подключение файла к трейсеру&lt;/h3>
&lt;p>К параметрам запуска приложения добавьте каталог с конфигурациями и список файлов
в нём:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">java -javaagent:/path/to/pobp-java-agent.jar &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Dpobp.service&lt;span class="o">=&lt;/span>my_service_name &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Dpobp.jmxfetch.config.dir&lt;span class="o">=&lt;/span>/etc/protoobp/jmx &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -Dpobp.jmxfetch.config&lt;span class="o">=&lt;/span>custom-metrics.yaml &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -jar my_app.jar
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>То же самое переменными окружения:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">POBP_JMXFETCH_CONFIG_DIR&lt;/span>&lt;span class="o">=&lt;/span>/etc/protoobp/jmx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">POBP_JMXFETCH_CONFIG&lt;/span>&lt;span class="o">=&lt;/span>custom-metrics.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В &lt;code>POBP_JMXFETCH_CONFIG&lt;/code> можно перечислить несколько файлов через запятую —
пути указываются относительно &lt;code>POBP_JMXFETCH_CONFIG_DIR&lt;/code>.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Обратите внимание&lt;/h4>
Собственная конфигурация &lt;strong>не отменяет&lt;/strong> сбор стандартных метрик JVM и метрик
поддерживаемых интеграций (Tomcat, Kafka, Cassandra и др.) — она добавляется к
ним.
&lt;/div>
&lt;h3 id="пример-docker">Пример: Docker&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-Dockerfile" data-lang="Dockerfile">&lt;span class="line">&lt;span class="cl">&lt;span class="k">FROM&lt;/span>&lt;span class="s"> eclipse-temurin:17-jre&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">WORKDIR&lt;/span>&lt;span class="s"> /opt/app&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">ENV&lt;/span> &lt;span class="nv">POBP_AGENT_HOST&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;protoobp-agent&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">ENV&lt;/span> &lt;span class="nv">POBP_SERVICE&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;my_service_name&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="c"># Необходимо для доставки JMX-метрик агенту в контейнере&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">ENV&lt;/span> &lt;span class="nv">POBP_DOGSTATSD_NON_LOCAL_TRAFFIC&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;true&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="c"># Кастомные JMX-метрики&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">ENV&lt;/span> &lt;span class="nv">POBP_JMXFETCH_CONFIG_DIR&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;/etc/protoobp/jmx&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">ENV&lt;/span> &lt;span class="nv">POBP_JMXFETCH_CONFIG&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;custom-metrics.yaml&amp;#34;&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> pobp-java-agent.jar /opt/app/pobp-java-agent.jar&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> custom-metrics.yaml /etc/protoobp/jmx/custom-metrics.yaml&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">COPY&lt;/span> target/my-app.jar /opt/app/my-app.jar&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="k">CMD&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;java&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;-javaagent:/opt/app/pobp-java-agent.jar&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;-jar&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;/opt/app/my-app.jar&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="пример-kubernetes">Пример: Kubernetes&lt;/h3>
&lt;p>Конфигурацию метрик удобно хранить в &lt;code>ConfigMap&lt;/code> — тогда для изменения набора
метрик не нужно пересобирать образ:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ConfigMap&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pobp-jmx-config&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">data&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">custom-metrics.yaml&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> init_config:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> is_jmx: true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="sd"> instances:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="sd"> - jvm_direct: true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="sd"> name: my_app_custom_metrics
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="sd"> conf:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> - include:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> domain: com.example.app
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> attribute:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> Size:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> alias: myapp.orders.queue_size
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> metric_type: gauge&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nn">---&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">apps/v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Deployment&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c">#(...)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">containers&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">my-app&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">POBP_SERVICE&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">value&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">my_service_name&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">POBP_AGENT_HOST&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">valueFrom&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line hl">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fieldRef&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">fieldPath&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">status.hostIP&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">POBP_DOGSTATSD_NON_LOCAL_TRAFFIC&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">value&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;true&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">POBP_JMXFETCH_CONFIG_DIR&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">value&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">/etc/protoobp/jmx&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">POBP_JMXFETCH_CONFIG&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">value&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">custom-metrics.yaml&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">volumeMounts&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pobp-jmx-config&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">mountPath&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">/etc/protoobp/jmx&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">volumes&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pobp-jmx-config&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">configMap&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pobp-jmx-config&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="параметры-jmx-сбора-в-трейсере">Параметры JMX-сбора в трейсере&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>System Property&lt;/th>
&lt;th>Переменная окружения&lt;/th>
&lt;th>По умолчанию&lt;/th>
&lt;th>Описание&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.enabled&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_ENABLED&lt;/code>&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>Включение сбора JMX-метрик&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.config.dir&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_CONFIG_DIR&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;td>Каталог с YAML-файлами конфигураций&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.config&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_CONFIG&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;td>Список файлов конфигураций (через запятую)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.check-period&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_CHECK_PERIOD&lt;/code>&lt;/td>
&lt;td>&lt;code>15000&lt;/code>&lt;/td>
&lt;td>Период сбора метрик, мс&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.refresh-beans-period&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_REFRESH_BEANS_PERIOD&lt;/code>&lt;/td>
&lt;td>&lt;code>600&lt;/code>&lt;/td>
&lt;td>Период обновления списка подходящих MBean&amp;rsquo;ов, с&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.initial-refresh-beans-period&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_INITIAL_REFRESH_BEANS_PERIOD&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;td>Период обновления списка bean&amp;rsquo;ов сразу после старта, с (полезно, если bean&amp;rsquo;ы регистрируются с задержкой)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.start-delay&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_START_DELAY&lt;/code>&lt;/td>
&lt;td>&lt;code>15&lt;/code>&lt;/td>
&lt;td>Задержка перед первым сбором, с&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.statsd.host&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_STATSD_HOST&lt;/code>&lt;/td>
&lt;td>адрес агента&lt;/td>
&lt;td>Хост, куда отправляются метрики&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.jmxfetch.statsd.port&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_JMXFETCH_STATSD_PORT&lt;/code>&lt;/td>
&lt;td>&lt;code>8125&lt;/code>&lt;/td>
&lt;td>Порт DogStatsD агента&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pobp.trace.jmx.tags&lt;/code>&lt;/td>
&lt;td>&lt;code>POBP_TRACE_JMX_TAGS&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;td>Дополнительные лейблы на всех JMX-метриках, формат &lt;code>key1:value1,key2:value2&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="способ-2-сбор-через-protoobp-агент">Способ 2: сбор через ProtoOBP Агент&lt;/h2>
&lt;p>В этом режиме агент подключается к JVM по JMX Remote и опрашивает MBean&amp;rsquo;ы
снаружи. Приложению трейсер не требуется.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Образ агента для JMX&lt;/h4>
Если ProtoOBP Агент работает в контейнере (Docker, Kubernetes), &lt;strong>используйте
образ с суффиксом &lt;code>-jmx&lt;/code>&lt;/strong>, например &lt;code>protoobp-agent:7.80.2-jmx&lt;/code>. Без этого
суффикса в образе нет JRE и JMX-проверка не запускается.
&lt;/div>
&lt;h3 id="включение-jmx-remote-в-приложении">Включение JMX Remote в приложении&lt;/h3>
&lt;p>К параметрам запуска JVM добавьте:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">-Dcom.sun.management.jmxremote &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-Dcom.sun.management.jmxremote.port&lt;span class="o">=&lt;/span>&lt;span class="m">9010&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-Dcom.sun.management.jmxremote.rmi.port&lt;span class="o">=&lt;/span>&lt;span class="m">9010&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-Dcom.sun.management.jmxremote.authenticate&lt;span class="o">=&lt;/span>&lt;span class="nb">false&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-Dcom.sun.management.jmxremote.ssl&lt;span class="o">=&lt;/span>&lt;span class="nb">false&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-Dcom.sun.management.jmxremote.local.only&lt;span class="o">=&lt;/span>&lt;span class="nb">false&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span>-Djava.rmi.server.hostname&lt;span class="o">=&lt;/span>&amp;lt;имя_хоста_или_адрес_интерфейса&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">`java.rmi.server.hostname`&lt;/h4>
&lt;p>JMX RMI отдаёт клиенту адрес второго сокета через значение
&lt;code>java.rmi.server.hostname&lt;/code>. Этот адрес должен &lt;strong>резолвиться и быть достижим с
хоста (или из контейнера) агента&lt;/strong>. Не указывайте &lt;code>0.0.0.0&lt;/code> или &lt;code>localhost&lt;/code> —
агент получит этот адрес и упадёт с &lt;code>Connection refused&lt;/code>.&lt;/p>
&lt;p>На проде включайте аутентификацию JMX
(&lt;code>-Dcom.sun.management.jmxremote.authenticate=true&lt;/code> с файлами &lt;code>password&lt;/code>/&lt;code>access&lt;/code>)
и TLS вместо &lt;code>ssl=false&lt;/code>.&lt;/p>
&lt;/div>
&lt;h3 id="конфигурация-проверки-на-агенте">Конфигурация проверки на агенте&lt;/h3>
&lt;p>Создайте файл &lt;code>/etc/protoobp-agent/conf.d/&amp;lt;имя_проверки&amp;gt;.d/conf.yaml&lt;/code>, где
&lt;code>&amp;lt;имя_проверки&amp;gt;&lt;/code> — произвольное имя (например &lt;code>myapp&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">init_config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">is_jmx&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">new_gc_metrics&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Дополнительные jar&amp;#39;ы в classpath JVM агента, если нужны свои классы&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># custom_jar_paths:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># - /opt/protoobp/myapp-jmx-classes.jar&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">instances&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">host&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">localhost&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">port&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">9010&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp_instance&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Собирать стандартные метрики JVM вместе с кастомными (по умолчанию true)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">collect_default_jvm_metrics&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># user: monitorRole # если на JMX включена аутентификация&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># password: &amp;lt;пароль&amp;gt;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tags&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">service:my_service_name&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">env:prod&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">conf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">include&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">domain&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">com.example.app&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">bean&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;com.example.app:type=OrderQueue&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attribute&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">Size&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.orders.queue_size&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gauge&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Перезапустите агента:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">systemctl restart protoobp-agent
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">`collect_default_metrics` и `collect_default_jvm_metrics`&lt;/h4>
&lt;p>Это &lt;strong>два разных параметра&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>collect_default_metrics: true&lt;/code> в &lt;code>init_config&lt;/code> — просит агента добавить к
проверке готовый набор метрик встроенной интеграции (файл &lt;code>metrics.yaml&lt;/code>
рядом с &lt;code>conf.yaml&lt;/code>). Работает только для имён встроенных интеграций
(&lt;code>tomcat&lt;/code>, &lt;code>kafka&lt;/code>, &lt;code>activemq&lt;/code>, &lt;code>weblogic&lt;/code>, &lt;code>cassandra&lt;/code> и др.). Для проверки
с произвольным именем набора нет — в логе агента появится
&lt;code>&amp;lt;имя&amp;gt; doesn't have an additional metric configuration file&lt;/code>.&lt;/li>
&lt;li>&lt;code>collect_default_jvm_metrics&lt;/code> на уровне instance — сбор стандартных метрик
JVM (heap, GC, потоки). Включён по умолчанию.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;h3 id="если-агент-запускается-в-виде-docker-контейнера">Если агент запускается в виде Docker контейнера&lt;/h3>
&lt;p>Набор метрик можно задать autodiscovery-лейблами прямо на контейнере
приложения:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">my-app&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">labels&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.check_names&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[&amp;#34;myapp&amp;#34;]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.init_configs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;[{&amp;#34;is_jmx&amp;#34;: true, &amp;#34;new_gc_metrics&amp;#34;: true}]&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">com.protoobp.ad.instances&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">&amp;gt;-&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> [{&amp;#34;host&amp;#34;: &amp;#34;%%host%%&amp;#34;, &amp;#34;port&amp;#34;: &amp;#34;9010&amp;#34;, &amp;#34;name&amp;#34;: &amp;#34;myapp_instance&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;conf&amp;#34;: [{&amp;#34;include&amp;#34;: {&amp;#34;domain&amp;#34;: &amp;#34;com.example.app&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;attribute&amp;#34;: {&amp;#34;Size&amp;#34;: {&amp;#34;alias&amp;#34;: &amp;#34;myapp.orders.queue_size&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> &amp;#34;metric_type&amp;#34;: &amp;#34;gauge&amp;#34;}}}}]}]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Контейнер агента должен находиться в одной docker network с приложением, иметь
образ с суффиксом &lt;code>-jmx&lt;/code> и смонтированный &lt;code>/var/run/docker.sock:/var/run/docker.sock:ro&lt;/code>
для autodiscovery.&lt;/p>
&lt;h3 id="параметры-подключения-к-jvm">Параметры подключения к JVM&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Параметр&lt;/th>
&lt;th>Описание&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>host&lt;/code>, &lt;code>port&lt;/code>&lt;/td>
&lt;td>Адрес и порт JMX Remote&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>jmx_url&lt;/code>&lt;/td>
&lt;td>Нестандартный JMX URL вместо &lt;code>host&lt;/code>/&lt;code>port&lt;/code>, например &lt;code>service:jmx:rmi:///jndi/rmi://host:9999/jmxrmi&lt;/code>. При использовании обязательно задайте &lt;code>name&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>user&lt;/code>, &lt;code>password&lt;/code>&lt;/td>
&lt;td>Учётные данные JMX&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>process_name_regex&lt;/code>&lt;/td>
&lt;td>Подключение к локальному процессу через attach API вместо &lt;code>host&lt;/code>/&lt;code>port&lt;/code>. Требует установленного JDK и &lt;code>tools_jar_path&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tools_jar_path&lt;/code>&lt;/td>
&lt;td>Путь к &lt;code>tools.jar&lt;/code> (обязателен вместе с &lt;code>process_name_regex&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>name&lt;/code>&lt;/td>
&lt;td>Имя instance&amp;rsquo;а — попадает в лейбл &lt;code>instance&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tags&lt;/code>&lt;/td>
&lt;td>Список лейблов &lt;code>key:value&lt;/code> на всех метриках instance&amp;rsquo;а&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>refresh_beans&lt;/code>&lt;/td>
&lt;td>Период обновления списка подходящих MBean&amp;rsquo;ов, с (по умолчанию &lt;code>600&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>java_bin_path&lt;/code>&lt;/td>
&lt;td>Путь к &lt;code>java&lt;/code>, если агент не может его найти&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>java_options&lt;/code>&lt;/td>
&lt;td>JVM-опции сборщика метрик, например &lt;code>-Xmx200m -Xms50m&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>trust_store_path&lt;/code>, &lt;code>trust_store_password&lt;/code>&lt;/td>
&lt;td>TrustStore, если на JMX включён SSL&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>key_store_path&lt;/code>, &lt;code>key_store_password&lt;/code>&lt;/td>
&lt;td>KeyStore, если на целевой JVM включена клиентская аутентификация&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>rmi_registry_ssl&lt;/code>&lt;/td>
&lt;td>Подключаться к RMI-реестру по SSL&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>collect_default_jvm_metrics&lt;/code>&lt;/td>
&lt;td>Сбор стандартных метрик JVM (по умолчанию &lt;code>true&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>max_returned_metrics&lt;/code>&lt;/td>
&lt;td>Лимит метрик на instance, см. &lt;a href="#%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%be%d0%bb%d0%b8%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">ниже&lt;/a>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="синтаксис-описания-метрик-conf">Синтаксис описания метрик (&lt;code>conf&lt;/code>)&lt;/h2>
&lt;p>Секция &lt;code>conf&lt;/code> — список правил. Каждое правило содержит &lt;code>include&lt;/code> (что собирать)
и, опционально, &lt;code>exclude&lt;/code> (что из этого исключить). Формат одинаков для трейсера
и для агента.&lt;/p>
&lt;h3 id="фильтры-include-и-exclude">Фильтры &lt;code>include&lt;/code> и &lt;code>exclude&lt;/code>&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Ключ&lt;/th>
&lt;th>Описание&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>domain&lt;/code>&lt;/td>
&lt;td>Точное имя JMX-домена, например &lt;code>com.example.app&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>domain_regex&lt;/code>&lt;/td>
&lt;td>Регулярное выражение по домену&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>bean&lt;/code> (или &lt;code>bean_name&lt;/code>)&lt;/td>
&lt;td>Полное имя MBean&amp;rsquo;а или список имён&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>bean_regex&lt;/code>&lt;/td>
&lt;td>Регулярное выражение по полному имени MBean&amp;rsquo;а или список выражений&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>class&lt;/code>&lt;/td>
&lt;td>Имя Java-класса MBean&amp;rsquo;а&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>attribute&lt;/code>&lt;/td>
&lt;td>Описание собираемых атрибутов (см. ниже). В &lt;code>exclude&lt;/code> можно перечислить атрибуты списком&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tags&lt;/code>&lt;/td>
&lt;td>Дополнительные лейблы, добавляемые к метрикам правила&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>exclude_tags&lt;/code>&lt;/td>
&lt;td>Список лейблов, которые не нужно добавлять к метрикам&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">conf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Собрать весь домен, кроме служебных bean&amp;#39;ов&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">include&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">domain&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">com.example.app&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">exclude&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">bean_regex&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s1">&amp;#39;com\.example\.app:type=Internal.*&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Экранирование в regex&lt;/h4>
&lt;code>bean_regex&lt;/code> — это Java-регулярное выражение, точка в нём означает «любой
символ». Точки в именах доменов и bean&amp;rsquo;ов экранируйте: &lt;code>com\.example\.app&lt;/code>.
Выражения заключайте в одинарные кавычки, чтобы YAML не интерпретировал
обратные слэши.
&lt;/div>
&lt;h3 id="описание-атрибутов-и-типы-метрик">Описание атрибутов и типы метрик&lt;/h3>
&lt;p>Атрибуты задаются словарём &lt;code>имя_атрибута: {alias, metric_type}&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">attribute&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">Size&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.orders.queue_size&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gauge&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">TotalProcessed&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.orders.processed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">monotonic_count&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;code>metric_type&lt;/code>&lt;/th>
&lt;th>Поведение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>gauge&lt;/code>&lt;/td>
&lt;td>Мгновенное значение атрибута (по умолчанию)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>rate&lt;/code>&lt;/td>
&lt;td>Значение монотонного счётчика конвертируется в скорость изменения в секунду&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>monotonic_count&lt;/code>&lt;/td>
&lt;td>Монотонный счётчик передаётся как приращение между сборами&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>counter&lt;/code>&lt;/td>
&lt;td>Устаревший синоним &lt;code>rate&lt;/code>, использовать не рекомендуется&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>histogram&lt;/code>&lt;/td>
&lt;td>Распределение значений (percentiles, avg, max)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Если атрибуты не перечислены явно, будут собраны &lt;strong>все&lt;/strong> числовые атрибуты
подходящих bean&amp;rsquo;ов, а имена метрик составятся автоматически из домена и имени
атрибута. Это удобно для разведки, но на большом домене быстро упирается в
&lt;a href="#%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%be%d0%bb%d0%b8%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">лимит метрик&lt;/a> — в рабочей конфигурации
перечисляйте атрибуты и задавайте &lt;code>alias&lt;/code> явно.&lt;/p>
&lt;h3 id="лейблы-метрик">Лейблы метрик&lt;/h3>
&lt;p>К JMX-метрикам автоматически добавляются:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Лейбл&lt;/th>
&lt;th>Значение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>host&lt;/code>&lt;/td>
&lt;td>Хост, на котором работает приложение (способ 1) или агент (способ 2)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>instance&lt;/code>&lt;/td>
&lt;td>Значение &lt;code>name&lt;/code> из конфигурации instance&amp;rsquo;а&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>jmx_domain&lt;/code>&lt;/td>
&lt;td>Домен MBean&amp;rsquo;а&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>service&lt;/code>, &lt;code>env&lt;/code>&lt;/td>
&lt;td>Теги сервиса — из конфигурации трейсера (способ 1) или из &lt;code>tags&lt;/code> (способ 2)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Кроме того, &lt;strong>все параметры из имени MBean&amp;rsquo;а становятся лейблами&lt;/strong>. Например
bean &lt;code>com.example.app:type=ConnectionPool,pool=orders&lt;/code> даёт лейблы
&lt;code>type:ConnectionPool&lt;/code> и &lt;code>pool:orders&lt;/code> — по ним метрику можно разбивать на графике
и фильтровать. Ненужные параметры отключаются через &lt;code>exclude_tags&lt;/code>.&lt;/p>
&lt;h3 id="составные-атрибуты">Составные атрибуты&lt;/h3>
&lt;p>Для атрибутов типа &lt;code>CompositeData&lt;/code> (например &lt;code>java.lang:type=Memory&lt;/code> →
&lt;code>HeapMemoryUsage&lt;/code>) можно обращаться к вложенным полям:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">conf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">include&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">domain&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">com.example.app&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">bean&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s1">&amp;#39;com.example.app:type=Cache&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">attribute&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">Stats.hitCount&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.cache.hits&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">monotonic_count&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">Stats.missCount&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">alias&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myapp.cache.misses&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">metric_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">monotonic_count&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="имена-метрик-в-интерфейсе-proto-obp">Имена метрик в интерфейсе Proto OBP&lt;/h2>
&lt;p>Точки в имени метрики (&lt;code>alias&lt;/code>) при сохранении заменяются на подчёркивания.
Метрика с &lt;code>alias: myapp.orders.queue_size&lt;/code> в Metrics Explorer, на дашбордах и в
правилах алертов доступна как:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-promql" data-lang="promql">&lt;span class="line">&lt;span class="cl">&lt;span class="nv">myapp_orders_queue_size&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Рекомендации по именованию:&lt;/p>
&lt;ul>
&lt;li>используйте общий префикс приложения (&lt;code>myapp.&lt;/code>, &lt;code>billing.&lt;/code>) — так метрики легко
найти в Metrics Explorer;&lt;/li>
&lt;li>не используйте префикс &lt;code>jvm.&lt;/code> — он зарезервирован для стандартных метрик JVM;&lt;/li>
&lt;li>имя должно описывать величину, а разрезы (инстанс, пул, очередь) выносите в
лейблы, а не в имя метрики.&lt;/li>
&lt;/ul>
&lt;h2 id="ограничение-на-количество-метрик">Ограничение на количество метрик&lt;/h2>
&lt;p>Один instance по умолчанию отдаёт не более &lt;strong>350&lt;/strong> метрик. При превышении
лишние метрики отбрасываются, а в логе появляется предупреждение
&lt;code>Maximum number of metrics reached&lt;/code>.&lt;/p>
&lt;p>Если метрик действительно нужно больше, увеличьте лимит в конфигурации
instance&amp;rsquo;а:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">instances&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">jvm_direct&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">my_app_custom_metrics&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">max_returned_metrics&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">2000&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">conf&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># ...&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Прежде чем поднимать лимит, сузьте фильтры: сбор всего домена без перечисления
атрибутов создаёт большое количество ненужных временных рядов и повышает
стоимость хранения.&lt;/p>
&lt;h2 id="проверка-и-диагностика">Проверка и диагностика&lt;/h2>
&lt;p>&lt;strong>Способ 1 (трейсер).&lt;/strong> Запустите приложение с включённым отладочным логом
JMX-сборщика:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">-Dorg.slf4j.simpleLogger.log.org.datadog.jmxfetch&lt;span class="o">=&lt;/span>debug
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>В логе приложения будет видно, какие файлы конфигураций загружены, какие bean&amp;rsquo;ы
подошли под фильтры и сколько метрик отправлено. Типичные сообщения:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Сообщение в логе&lt;/th>
&lt;th>Причина&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Skipping instance ... jvm_direct=false&lt;/code>&lt;/td>
&lt;td>В instance не указан &lt;code>jvm_direct: true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Maximum number of metrics reached&lt;/code>&lt;/td>
&lt;td>Превышен лимит метрик, см. &lt;a href="#%d0%be%d0%b3%d1%80%d0%b0%d0%bd%d0%b8%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bd%d0%b0-%d0%ba%d0%be%d0%bb%d0%b8%d1%87%d0%b5%d1%81%d1%82%d0%b2%d0%be-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba">выше&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Нет метрик, ошибок нет&lt;/td>
&lt;td>Фильтр не совпал ни с одним bean&amp;rsquo;ом — проверьте домен и имя bean&amp;rsquo;а через &lt;code>jconsole&lt;/code> / &lt;code>jmxterm&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Способ 2 (агент).&lt;/strong> Статус проверки:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> protoobp-agent agent status &lt;span class="p">|&lt;/span> grep -A &lt;span class="m">8&lt;/span> &lt;span class="s2">&amp;#34;^ myapp&lt;/span>$&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Ожидается &lt;code>status : OK&lt;/code> и &lt;code>metric_count &amp;gt; 0&lt;/code>. Полезные команды:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Все атрибуты, подошедшие под фильтры и собираемые сейчас&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> protoobp-agent agent jmx list collected
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Атрибуты, подошедшие под include, но не собираемые (не числовые и т. п.)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> protoobp-agent agent jmx list matching
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Всё, что доступно в JVM — для поиска нужных bean&amp;#39;ов и атрибутов&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> protoobp-agent agent jmx list everything
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Атрибуты, отброшенные из-за лимита max_returned_metrics&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> protoobp-agent agent jmx list limited
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Итоговая проверка.&lt;/strong> Метрика должна появиться в разделе &lt;code>Метрики&lt;/code> &amp;gt;
&lt;code>Metrics Explorer&lt;/code> под именем с подчёркиваниями (&lt;code>myapp_orders_queue_size&lt;/code>).
Первые значения приходят через 15–30 секунд после старта приложения
(&lt;code>start-delay&lt;/code> + &lt;code>check-period&lt;/code>).&lt;/p></description></item></channel></rss>