我希望将使用 Prometheus API 公开指标的 Java 应用程序迁移到 OpenTelemetry API。
应用程序自定义指标部分还可以,但是对于 Prometheus API,我们过去使用
DefaultExports.initialize()
,它来自 simpleclient_hotspot 依赖项,并自动生成一堆 JVM 本身的指标,如下所示:
# HELP jvm_memory_bytes_max Max (bytes) of a given JVM memory area.
# TYPE jvm_memory_bytes_max gauge
jvm_memory_bytes_max{area="heap",} 3.221225472E9
jvm_memory_bytes_max{area="nonheap",} -1.0
# HELP jvm_memory_bytes_init Initial bytes of a given JVM memory area.
# TYPE jvm_memory_bytes_init gauge
jvm_memory_bytes_init{area="heap",} 3.221225472E9
jvm_memory_bytes_init{area="nonheap",} 7667712.0
是否有等效的库或方法可以使用 OpenTelemetry 完成相同的任务?
opentelemetry-java-instrumentation
项目发布了一个用于收集 JVM 运行时指标的库。源代码位于here,并发布到maven坐标io.opentelemetry.instrumentation:opentelemetry-runtime-metrics:<version>
。
要使用,请创建一个
OpenTelemetrySdk
实例,并初始化您需要的各种观察者:
OpenTelemetry opentelemetry = OpenTelemetrySdk.builder().build();
MemoryPools.registerObservers(opentelemetry);
BufferPools.registerObservers(opentelemetry);
Classes.registerObservers(opentelemetry);
Cpu.registerObservers(opentelemetry);
Threads.registerObservers(opentelemetry);
GarbageCollector.registerObservers(opentelemetry);
以防 2024 年有人在寻找此内容。
看来新的套餐是
io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java17:<version>