У меня есть куча 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"
Но это не похоже на правильное решение для меня, так как требует написания шаблона для каждой доступной метрики и обновления списка шаблонов при изменении списка метрик.