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

OpenTelemetry Java Agent无法接收SBT构建传入的参数问题排查

OpenTelemetry Java Agent无法接收SBT构建文件传入参数的问题

问题现象

使用com.lightbend.sbt.javaagent包的JavaAgent类挂载OpenTelemetry Java Agent后,运行时Agent始终尝试连接默认的localhost:4317,完全忽略SBT中配置的http://198.51.100.1:4317端点;但直接通过命令行手动传递参数时,Agent能正常使用配置的端点。

SBT构建文件片段

val buildOpenTelemtryJavaAgent: JavaAgent.AgentModule = {
  val attributes = "service.name=MY_SERVICE,environment=development"
  val argsStr = s"""otel.exporter=otlp otel.exporter.otlp.endpoint=http://198.51.100.1:4317 otel.resource.attributes="$attributes""""

  print(argsStr)
  JavaAgent(
    module = openTelemetryAgentPrefix % openTelemetryAgentModuleName % openTelemetryAgentVersion % "runtime",
    name = openTelemetryAgentName,
    scope = JavaAgent.AgentScope(true, true, true, true),
    arguments = argsStr
  )
}

运行时错误日志

[otel.javaagent 2023-05-16 06:45:58:127 +0000] [OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export spans. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317

手动运行的正确命令

-javaagent:/Users/[MY_USER]/dev/git/[MY_PROJECT]/target/scala-2.12/opentelemetry-javaagent.jar -Dotel.exporter=otlp -Dotel.exporter.otlp.endpoint=http://198.51.100.1:4317 -Dotel.resource.attributes="service.name=MY_SERVICE,environment=development"

问题根源

问题出在SBT JavaAgent插件的参数传递方式,和Agent的解析逻辑无关。

Lightbend的JavaAgent插件中,arguments字段的作用是传递Agent自身的启动参数(对应命令行中-javaagent:jarpath=agent_args里=后面的内容),但OpenTelemetry Java Agent的所有配置都是JVM系统属性(即命令行中-D开头的参数),并非Agent自身的启动参数。

你当前的写法把系统属性直接传给了Agent的arguments,完全不符合插件的参数预期,导致这些配置根本没被JVM加载,Agent只能使用默认值。


解决方案

不需要通过JavaAgent的arguments传递配置,而是将OpenTelemetry的参数作为JVM系统属性添加到SBT的运行配置中,和手动运行的逻辑保持一致。

修改后的代码示例

  1. 保留Agent挂载配置,移除无效的arguments字段:
val buildOpenTelemtryJavaAgent: JavaAgent.AgentModule = {
  JavaAgent(
    module = openTelemetryAgentPrefix % openTelemetryAgentModuleName % openTelemetryAgentVersion % "runtime",
    name = openTelemetryAgentName,
    scope = JavaAgent.AgentScope(true, true, true, true)
  )
}
  1. 在SBT运行设置中添加系统属性:
val otelAttributes = "service.name=MY_SERVICE,environment=development"
val otelEndpoint = "http://198.51.100.1:4317"

run / javaOptions ++= Seq(
  "-Dotel.exporter=otlp",
  s"-Dotel.exporter.otlp.endpoint=$otelEndpoint",
  s"-Dotel.resource.attributes=$otelAttributes"
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:18:14