要使带有弹簧引导的测微计输出jvm_info {}规,需要什么配置?

时间:2019-03-28 18:44:17

标签: spring-boot spring-micrometer

我有许多非春季启动服务,它们使用io.prometheus simpleclient_hotspot自动生成JVM指标。

我正在尝试与这些以及我使用springmeter的默认设置的spring-boot服务生成的JVM度量标准保持一致。

是否有一些我需要的千分尺其他配置,以便它生成度量标准,例如:

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

我很高兴知道千分尺开箱即用:jvm_memory_used_bytes,它与simpleclient_hotspot中相同度量的名称不匹配:(

如果可能的话,我想保持一致性,jvm_info在测微计/弹簧引导中特别有用。

2 个答案:

答案 0 :(得分:0)

我建议您研究千分尺芯库中的NamingConvention。有几个使用它将名称转换为不同监视系统的示例(请查找包含NamingConvention的类)。例如,如果您使用的是Prometheus(看起来可能是这样),则可以以PrometheusNamingConvention为例。看来您会对实现/覆盖public String name(String name, Meter.Type type, @Nullable String baseUnit)方法感兴趣。

答案 1 :(得分:0)

回答我自己的问题

  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);
        }
    }

尽管这些滥用了测微计,但它们为我提供了兼容性,我需要使用测微计和Prometheus HotSpot库的组合来跨服务跟踪这些详细信息。