Какое условие влияет на порядок, в котором печатаются свойства MBean? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть куча java-приложений, которые нужно отслеживать через prometheus jmx-exporter. Проблема в том, что они имеют разный порядок свойств Бина, что приводит к различным именам метрики прометея, генерируемой jmx-экспортером. Например, application1 имеет bean

java.lang<type=MemoryPool, name=JIT data cache><Usage>used

, который преобразуется в метрику Прометея

java_lang_memorypool_usage_used{name="JIT data cache"}

application2 имеет bean-компонент (примечание name и type свойства поменялись местами)

java.lang<name=JIT data cache, type=MemoryPool><Usage>used

, который превращается в метрику прометея

java_lang_jit_data_cache_usage_used{type=MemoryPool}

Разница вызвана тем, что приложения, работающие на JVM или java, работают. Те, у которых type впервые запущены на openjdk версии 1.8.0_172. Те, у кого name первый запуск на openj9 версии 11.0.2.

Я бы хотел настроить application2 так, чтобы он возвращал свойства в том же порядке, что и application1, независимо от того, на какой JVM они работают. Есть ли способ сделать это?

P.S. Мне удалось обойти проблему, поместив шаблоны в конфигурацию jmx-exporter, например:

    - pattern: "java.lang<name=(.*), type=MemoryPool><(\\w+)>(\\w+)"
      name: "java_lang_memorypool_$2_$3"
      labels:
        name: "$1"

Но это не похоже на правильное решение для меня, так как требует написания шаблона для каждой доступной метрики и обновления списка шаблонов при изменении списка метрик.

...