3

我有许多非 spring-boot 服务,它们使用io.prometheus simpleclient_hotspot.

我正在尝试与这些以及使用千分尺默认设置的 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对千分尺/弹簧靴特别有用。

4

2 回答 2

1

我建议您查看NamingConvention在 micrometer 核心库中找到的内容。有几个使用它将名称转换为不同监控系统的示例(查找类implenting NamingConvention)。例如,如果您正在使用 Prometheus(看起来可能是),您可以将PrometheusNamingConvention其视为一个示例。看起来您会对实现/覆盖该public String name(String name, Meter.Type type, @Nullable String baseUnit)方法感兴趣。

于 2019-05-21T01:24:15.850 回答
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);
        }
    }

尽管这些论文滥用了 Micrometer Gauge,但它们为我提供了兼容性,我需要使用 Micrometer 和 Prometheus HotSpot 库的混合来跨服务跟踪这些细节。

于 2020-10-21T22:40:36.047 回答