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

如何在Java应用中启用OpenTelemetry自动插装?附Dockerfile改造步骤

Java应用Docker容器中启用OpenTelemetry自动插装步骤

1. 修正原Dockerfile的基础镜像问题

原Dockerfile包含两个FROM指令,最终镜像只会基于最后一个,建议删除多余的FROM openjdk:17,保留更轻量的eclipse-temurin:17-jdk-alpine。

2. 准备OpenTelemetry Java代理

  • 下载对应版本的OpenTelemetry Java代理jar包(推荐使用稳定版,如v1.32.0)
  • 将下载好的opentelemetry-javaagent.jar放到项目根目录

3. 修改Dockerfile,添加代理与插装配置

在Dockerfile中添加代理拷贝指令,并修改启动命令启用自动插装:

FROM eclipse-temurin:17-jdk-alpine

WORKDIR /xyz-service

# 拷贝OpenTelemetry Java代理到容器内
COPY ./opentelemetry-javaagent.jar /xyz-service/opentelemetry-javaagent.jar

COPY ./.mvn /xyz-service
COPY ./src /xyz-service/src
ADD ./target/xyz-service-0.0.1-SNAPSHOT.jar xyz-service.jar

EXPOSE 8080

# 启用OpenTelemetry自动插装的启动命令
ENTRYPOINT ["java", "-javaagent:/xyz-service/opentelemetry-javaagent.jar", \
            "-Dotel.service.name=xyz-service", \
            "-Dotel.exporter.otlp.endpoint=http://your-otel-collector:4317", \
            "-Dotel.exporter.otlp.protocol=grpc", \
            "-Dotel.resource.attributes=deployment.environment=production", \
            "-jar", "xyz-service.jar"]

关键参数说明

  • -javaagent:/xyz-service/opentelemetry-javaagent.jar:指定自动插装代理的路径,触发OpenTelemetry自动增强
  • -Dotel.service.name:设置服务标识名,用于追踪数据中区分不同服务
  • -Dotel.exporter.otlp.endpoint:替换为你的OpenTelemetry收集器实际地址
  • -Dotel.exporter.otlp.protocol:可选,默认gRPC,也可指定http/protobuf
  • -Dotel.resource.attributes:自定义资源属性,比如部署环境、集群信息等

4. 优化:用环境变量传递配置(可选)

如果需要灵活调整配置,避免硬编码,可改用环境变量传递参数:
修改ENTRYPOINT为:

ENTRYPOINT ["java", "-javaagent:/xyz-service/opentelemetry-javaagent.jar", \
            "-Dotel.service.name=${OTEL_SERVICE_NAME:-xyz-service}", \
            "-Dotel.exporter.otlp.endpoint=${OTEL_EXPORTER_OTLP_ENDPOINT:-http://localhost:4317}", \
            "-Dotel.resource.attributes=${OTEL_RESOURCE_ATTRIBUTES:-deployment.environment=production}", \
            "-jar", "xyz-service.jar"]

运行容器时通过-e参数注入配置:

docker run -e OTEL_SERVICE_NAME=xyz-service-prod \
           -e OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317 \
           -p 8080:8080 \
           your-image-tag

5. 验证插装效果

启动容器后,查看应用日志,若出现类似以下日志,说明代理初始化成功:

[otel.javaagent 2024-05-20 10:00:00:000 +0000] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: 1.32.0

同时检查OpenTelemetry收集器是否接收到该服务的追踪数据。

内容的提问来源于stack exchange,提问作者Anamika Khantwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:32:10