Какая конфигурация требуется, чтобы получить micrometer с spring-boot для вывода jvm_info{} guage?

#spring-boot #spring-micrometer

#spring-boot #spring-micrometer

Вопрос:

У меня есть несколько сервисов без spring-boot, которые автоматически генерируют метрики JVM с помощью io.prometheus simpleclient_hotspot .

Я пытаюсь получить четность с этими и метриками JVM, созданными из моих сервисов spring-boot, которые используют настройки micrometer по умолчанию.

Существует ли какая-либо дополнительная конфигурация для micrometer, которая мне нужна для того, чтобы он генерировал такие показатели, как:

 # TYPE jvm_info gauge
jvm_info{version="
...
jvm_memory_bytes_used
jvm_memory_pool_bytes_max
etc...
  

?

Я ценю, что micrometer из коробки ведет журнал: jvm_memory_used_bytes который не соответствует имени той же метрики из simpleclient_hotspot 🙁

Я хотел бы добиться согласованности, если это возможно, и jvm_info было бы особенно полезно использовать micrometer / spring-boot.

Ответ №1:

Я рекомендую вам заглянуть NamingConvention в библиотеку micrometer core. Есть несколько примеров его использования для преобразования имен в разные системы мониторинга (ищите классы, имплицирующие NamingConvention ). Например, если вы используете Prometheus (которым, похоже, вы могли бы быть), вы могли бы посмотреть на PrometheusNamingConvention в качестве примера. Похоже, вам будет интересно реализовать / переопределить public String name(String name, Meter.Type type, @Nullable String baseUnit) метод.

Ответ №2:

Чтобы ответить на мой собственный вопрос (ы)

  1. В итоге я реализовал это для информации о версии JVM:
     import io.micrometer.core.instrument.Gauge;
    import io.micrometer.core.instrument.MeterRegistry;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    /**
     * Migrated From simpleclient_hotspot/src/main/java/io/prometheus/client/hotspot/VersionInfoExports.java
     * Because its not included in Micrometer.
     */
    @Component
    public class JvmVersionInfoExports {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(JvmVersionInfoExports.class);
    
        public JvmVersionInfoExports(MeterRegistry meterRegistry) {
            LOGGER.info("Adding JVM Metrics");
            Gauge.builder("jvm_info", () -> 1L)
                    .description("JVM version info")
                    .tag("version", System.getProperty("java.runtime.version", "unknown"))
                    .tag("vendor", System.getProperty("java.vm.vendor", "unknown"))
                    .tag("runtime", System.getProperty("java.runtime.name", "unknown"))
                    .register(meterRegistry);
        }
    } 
  
  1. В итоге я реализовал это для информации о версии ОС:
     import io.micrometer.core.instrument.Gauge;
    import io.micrometer.core.instrument.MeterRegistry;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    @Component
    public class OsVersionInfoExports {
        private static final Logger LOGGER = LoggerFactory.getLogger(OsVersionInfoExports.class);
    
        public OsVersionInfoExports(MeterRegistry meterRegistry) {
            LOGGER.info("Adding OS Metrics");
            Gauge.builder("os_info", () -> 1L)
                    .description("OS version info")
                    .tag("version", System.getProperty("os.version", "unknown"))
                    .tag("arch", System.getProperty("os.arch", "unknown"))
                    .tag("name", System.getProperty("os.name", "unknown"))
                    .register(meterRegistry);
        }
    }
  

Хотя в тезисах неправильно используется микрометрический датчик, они обеспечивают мне совместимость, необходимую для отслеживания этих сведений в сервисах, используя сочетание библиотек Micrometer и Prometheus HotSpot.