You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移Java应用至OpenTelemetry:是否有simpleclient_hotspot替代方案?

OpenTelemetry 实现JVM指标自动采集的方案

完全有对应的实现,OpenTelemetry提供了官方的JVM指标自动采集能力,能替代Prometheus simpleclient_hotspot里的DefaultExports.initialize(),具体操作如下:

1. 添加依赖

以Maven为例,引入相关核心依赖:

<!-- OpenTelemetry SDK 核心 -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk</artifactId>
    <version>1.32.0</version>
</dependency>
<!-- JVM 指标自动采集扩展 -->
<dependency>
    <groupId>io.opentelemetry.contrib</groupId>
    <artifactId>opentelemetry-jvm-metrics</artifactId>
    <version>1.32.0</version>
</dependency>
<!-- 语义规范依赖,确保指标符合标准 -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-semconv</artifactId>
    <version>1.32.0-alpha</version>
</dependency>

2. 代码初始化采集

在应用启动阶段,加入以下代码开启JVM指标自动采集:

import io.opentelemetry.contrib.jvmmetrics.JvmMetrics;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.metrics.SdkMeterProvider;

// 初始化MeterProvider(如果应用还没初始化过)
SdkMeterProvider meterProvider = SdkMeterProvider.builder().build();
OpenTelemetrySdk openTelemetry = OpenTelemetrySdk.builder()
    .setMeterProvider(meterProvider)
    .build();

// 注册JVM指标采集器,自动生成JVM相关指标
JvmMetrics.builder().build().registerMetrics(openTelemetry);

3. 覆盖的指标范围

这套方案采集的JVM指标完全覆盖你之前用Prometheus获取的内容,包括:

  • 堆/非堆内存的初始化、最大、已用、提交字节数
  • GC的执行次数、耗时统计
  • 线程的活跃、阻塞、等待等状态计数
  • 类加载、卸载的数量统计
  • 其他JVM运行时核心指标

这些指标可以通过OpenTelemetry的Prometheus导出器,以和之前兼容的格式暴露出来,也能发送到其他OpenTelemetry支持的后端系统。

更省心的替代方案:自动探针

如果不想改代码,直接用OpenTelemetry Java自动探针(agent)就行。启动应用时加个JVM参数,探针会自动注入JVM指标采集逻辑,无需任何代码修改:

java -javaagent:opentelemetry-javaagent.jar -jar 你的应用.jar

自动探针默认就会开启JVM指标采集,还能自动支持很多常见框架的链路追踪和指标采集。

内容的提问来源于stack exchange,提问作者Gaël J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:30:48