我有许多非春季启动服务,它们使用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
在测微计/弹簧引导中特别有用。
答案 0 :(得分:0)
我建议您研究千分尺芯库中的NamingConvention
。有几个使用它将名称转换为不同监视系统的示例(请查找包含NamingConvention
的类)。例如,如果您使用的是Prometheus(看起来可能是这样),则可以以PrometheusNamingConvention
为例。看来您会对实现/覆盖public String name(String name, Meter.Type type, @Nullable String baseUnit)
方法感兴趣。
答案 1 :(得分:0)
回答我自己的问题
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);
}
}
尽管这些滥用了测微计,但它们为我提供了兼容性,我需要使用测微计和Prometheus HotSpot库的组合来跨服务跟踪这些详细信息。