Java 自动埋点
Java 自动埋点使用 OpenTelemetry Java 智能体为 Java 应用程序提供全面的遥测数据采集。此插桩可自动从 Java 应用程序和常用框架中捕获 trace、metrics 和 logs,而无需修改代码。
目录
Java 自动埋点的工作原理启用 Java 插桩Java 智能体环境变量插桩控制特定插桩控制扩展配置高级配置自定义智能体镜像卷挂载按容器注入支持的 Java 版本故障排查验证智能体注入启用调试日志常见问题配置示例配置参考Java 自动埋点的工作原理
Operator 会将 OpenTelemetry Java 智能体作为一个 Java 智能体 JAR 文件注入到 Java 应用容器中。该智能体使用字节码插桩,在运行时自动对 Java 类进行插桩,并从以下来源捕获遥测数据:
- HTTP servers 和 clients(Servlet、Spring MVC、JAX-RS 等)
- Database clients(JDBC、Hibernate 等)
- Messaging systems(JMS、Kafka、RabbitMQ 等)
- RPC frameworks(gRPC 等)
- Caching libraries(Redis、Memcached 等)
- 以及许多其他流行的 Java 库和框架
启用 Java 插桩
要为 Java 应用启用自动埋点,请为你的 pod 或 namespace 添加注解:
Operator 会自动注入 Java 智能体,并通过设置带有 -javaagent 标志的 JAVA_TOOL_OPTIONS 环境变量来配置 JVM 在启动时加载它。
Java 智能体环境变量
以下环境变量用于控制 Java 智能体的行为:
插桩控制
OTEL_JAVAAGENT_ENABLED- 启用或禁用 Java 智能体(默认值:true)OTEL_JAVAAGENT_DEBUG- 为智能体启用调试日志(默认值:false)OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED- 默认启用所有插桩(默认值:true)
特定插桩控制
你可以启用或禁用特定插桩:
OTEL_INSTRUMENTATION_JDBC_ENABLED- JDBC 插桩OTEL_INSTRUMENTATION_SPRING_WEB_ENABLED- Spring Web 插桩OTEL_INSTRUMENTATION_KAFKA_ENABLED- Kafka 插桩OTEL_INSTRUMENTATION_REDIS_ENABLED- Redis 插桩
配置示例:
扩展配置
配置额外的智能体扩展:
OTEL_JAVAAGENT_EXTENSIONS- 额外智能体扩展的路径OTEL_JAVAAGENT_CONFIGURATION_FILE- 智能体配置文件的路径
高级配置
自定义智能体镜像
你可以指定自定义的 Java 智能体镜像:
卷挂载
智能体会挂载到应用容器中的 /otel-auto-instrumentation-java-<container-name>/。
按容器注入
对于多容器 pod,请指定需要进行插桩的容器:
支持的 Java 版本
OpenTelemetry Java 智能体支持:
- Java 8 及更高版本
故障排查
验证智能体注入
检查智能体是否已成功注入:
在容器命令中查找 -javaagent 参数。
启用调试日志
启用调试日志以排查问题:
常见问题
智能体未加载:验证 init container 是否已成功完成,并且智能体 JAR 是否存在于共享卷中。
缺少 traces:检查 exporter 端点是否正确,以及应用 pod 是否可以访问该端点。
内存使用率高:减少已启用插桩的数量,或调整 JVM 堆设置。
配置示例
Java 应用插桩的完整示例:
配置参考
如需了解详细的配置选项、受支持的库以及高级使用场景,请参阅官方 OpenTelemetry Operator 文档: