需要啥配置才能让带有 spring-boot 的千分尺输出 uvm_info 仪表?
Posted
技术标签:
【中文标题】需要啥配置才能让带有 spring-boot 的千分尺输出 uvm_info 仪表?【英文标题】:What configuration is required to get micrometer with spring-boot to output jvm_info guage?需要什么配置才能让带有 spring-boot 的千分尺输出 uvm_info 仪表? 【发布时间】:2019-08-19 15:35:44 【问题描述】:我有许多非 spring-boot 服务,它们使用 io.prometheus
simpleclient_hotspot
自动生成 JVM 指标。
我正在尝试与这些以及使用千分尺默认设置的 spring-boot 服务产生的 JVM 指标保持一致。
我需要为千分尺进行一些额外的配置,以便它生成指标,例如:
# TYPE jvm_info gauge
jvm_infoversion="
...
jvm_memory_bytes_used
jvm_memory_pool_bytes_max
etc...
?
我很欣赏开箱即用的千分尺正在记录:jvm_memory_used_bytes
,它与来自 simpleclient_hotspot 的相同指标的名称不匹配:(
如果可能,我希望实现一致性,jvm_info
在 micrometer/spring-boot 中特别有用。
【问题讨论】:
【参考方案1】:我建议您查看微米核心库中的NamingConvention
。有几个使用它将名称转换为不同监控系统的示例(查找实现NamingConvention
的类)。例如,如果您正在使用 Prometheus(看起来可能是),您可以查看 PrometheusNamingConvention
作为示例。看来您会对实现/覆盖 public String name(String name, Meter.Type type, @Nullable String baseUnit)
方法感兴趣。
【讨论】:
【参考方案2】:回答我自己的问题
-
我最终为 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);
-
我最终为操作系统版本信息实现了这个:
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 库的组合来跨服务跟踪这些细节。
【讨论】:
以上是关于需要啥配置才能让带有 spring-boot 的千分尺输出 uvm_info 仪表?的主要内容,如果未能解决你的问题,请参考以下文章