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

Docker Compose中OpenTelemetry Java Agent无法向同编排的Collector导出数据

Docker Compose中OpenTelemetry Java Agent无法向同编排的Collector导出数据

我帮你排查了一下,核心问题出在Docker Compose的环境变量配置格式错误,导致你设置的OpenTelemetry导出端点根本没生效,Java Agent依然在使用默认的gRPC端口4317尝试连接Collector,这就是你看到Failed to connect to otel-collector/172.19.0.2:4317错误的原因。

下面是具体的修复步骤和优化建议:


1. 修正环境变量的配置格式

Docker Compose的environment字段中,环境变量的正确写法是KEY=VALUE,你之前用了冒号:的格式,这会导致变量无法被正确识别。另外,OTLP HTTP端点建议加上标准的v1路径(比如/v1/traces),避免出现404错误。

修改后的jpetstore服务环境变量部分:

environment:
  - JAVA_TOOL_OPTIONS="-javaagent:/opentelemetry-javaagent.jar"
  # 修正格式为KEY=VALUE,同时添加标准v1路径
  - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://otel-collector:4318/v1/traces
  - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://otel-collector:4318/v1/metrics
  - OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://otel-collector:4318/v1/logs
  # 建议添加服务名,这是OpenTelemetry的最佳实践
  - OTEL_SERVICE_NAME=jpetstore-service

2. 为Collector添加健康检查,确保就绪后再启动JPetStore

depends_on仅保证启动顺序,不保证Collector已经完成初始化并可以接受连接。添加健康检查后,JPetStore会等待Collector完全就绪后再启动,避免连接失败。

修改otel-collector服务,添加健康检查:

otel-collector:
  image: otel/opentelemetry-collector-contrib:latest
  command: ["--config=/otel-collector-config.yaml"]
  volumes:
    - ./otel-collector-config.yaml:/otel-collector-config.yaml
  expose:
    - "4317"  
    - "4318"
  ports:
    - "4317:4317"  
    - "4318:4318"
  restart: always
  # 添加健康检查,检查Collector的默认健康端口13133
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:13133/"]
    interval: 10s
    timeout: 5s
    retries: 5

同时更新jpetstore的depends_on配置,等待Collector健康:

depends_on:
  otel-collector:
    condition: service_healthy

3. 验证修复效果

  1. 停止并重新部署服务:
docker-compose down -v
docker-compose up -d
  1. 进入JPetStore容器,检查环境变量是否正确设置:
docker exec -it jpetstore printenv | grep OTEL

你应该能看到正确的导出端点配置。

  1. 查看Collector的日志,确认是否接收到来自JPetStore的数据:
docker logs -f otel-collector

如果配置正确,你会看到类似Received traces的日志信息。


额外注意点

  • 确保你使用的OpenTelemetry Java Agent版本是最新的,和Collector版本尽量兼容,避免出现协议不匹配的问题。
  • 你的Collector配置已经正确启用了OTLP的HTTP和gRPC协议,这部分不需要修改。

备注:内容来源于stack exchange,提问作者Giovanni Zago

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:54:33