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

Java 8应用使用OpenTelemetry Agent导出New Relic数据报464错误

OpenTelemetry Java Agent Java 8环境导出数据到New Relic报HTTP 464问题排查

正常运行场景(Java 11环境)

在Java 11环境下使用如下启动参数加载OpenTelemetry Java Agent,可正常将链路、指标、日志数据导出至New Relic平台:

java -javaagent:./otel/opentelemetry-javaagent.jar \
-DOTEL_EXPORTER_OTLP_COMPRESSION=gzip \
-DOTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT=4095 \
-DOTEL_JAVA_DISABLED_RESOURCE_PROVIDERS=io.opentelemetry.sdk.extension.resources.ProcessResourceProvider \
-DOTEL_EXPERIMENTAL_EXPORTER_OTLP_RETRY_ENABLED=true \
-DOTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=DELTA \
-Dotel.traces.exporter=otlp \
-Dotel.metrics.exporter=otlp \
-Dotel.logs.exporter=otlp \
-Dotel.exporter.otlp.endpoint=https://otlp.nr-data.net:4317 \
-Dotel.resource.attributes=service.name=app-service \
-Dotel.exporter.otlp.headers=api-key=<api-key> \
-Dotel.javaagent.debug=false -jar ./target/app-service-0.0.1-SNAPSHOT.jar

异常场景(Java 8 Docker环境)

在Java 8环境中使用如下启动参数与Dockerfile构建镜像运行时,数据导出失败。

启动参数配置

ENTRYPOINT ["java", \
  "-Dotel.traces.exporter=otlp", \
  "-Dotel.metrics.exporter=otlp", \
  "-Dotel.logs.exporter=otlp", \
  "-Dotel.exporter.otlp.endpoint=https://otlp.nr-data.net:4317", \
  "-DOTEL_EXPORTER_OTLP_COMPRESSION=gzip", \
  "-DOTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT=4095", \
  "-DOTEL_JAVA_DISABLED_RESOURCE_PROVIDERS=io.opentelemetry.sdk.extension.resources.ProcessResourceProvider", \
  "-DOTEL_EXPERIMENTAL_EXPORTER_OTLP_RETRY_ENABLED=true", \
  "-DOTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=DELTA", \
  "-Dotel.exporter.otlp.headers=api-key=<api-key>", \
  "-Dotel.resource.attributes=service.name=app-service", \
  "-Dotel.javaagent.debug=false", \
  "-javaagent:opentelemetry-javaagent.jar", "-jar", "app-service.jar"]

Dockerfile配置

FROM maven:3.8.1-jdk-8-slim AS build
WORKDIR /opt/app
COPY src src
COPY pom.xml .
RUN mvn -f pom.xml clean install

FROM openjdk:8-jdk-alpine
COPY --from=build /opt/app/target/app-service-*.jar app-service.jar
COPY ./otel/opentelemetry-javaagent.jar opentelemetry-javaagent.jar
EXPOSE 8080
ENTRYPOINT ["java", "-javaagent:opentelemetry-javaagent.jar", "-jar", "app-service.jar"]

报错日志

[otel.javaagent] [OkHttp https://otlp.nr-data.net:4317/...] WARN io.opentelemetry.exporter.internal.grpc.OkHttpGrpcExporter - Failed to export logs. Server responded with HTTP status code 464.

当前使用的opentelemetry-javaagent版本为1.12.0,需要确认适配New Relic数据导出的OpenTelemetry兼容Java 8的版本,解决HTTP 464报错。

解决方案

HTTP 464是New Relic OTLP接入点返回的协议协商错误,根源是1.12.0版本的OpenTelemetry Java Agent在Java 8(尤其是Alpine镜像的musl libc环境)下,gRPC请求的TLS ALPN协商存在缺陷,接入点无法识别合法请求。

  • 最优修复方案:升级OpenTelemetry Java Agent到1.19.0及以上稳定版本。从1.19版本开始,Agent内置了适配Java 8环境的Conscrypt安全提供方,修复了gRPC导出场景下的ALPN协商问题,不需要修改现有配置即可正常对接New Relic的4317 gRPC端口,全量支持链路、指标、日志数据导出,同时完全兼容Java 8运行环境。
  • 临时规避方案(无法升级Agent时使用):
    • 将OTLP导出协议从gRPC切换为HTTP/protobuf,把端点从4317端口改为4318端口,新增配置-Dotel.exporter.otlp.protocol=http/protobuf,端点配置修改为-Dotel.exporter.otlp.endpoint=https://otlp.nr-data.net:4318,绕过gRPC的ALPN协商逻辑。
    • 替换基础镜像,将openjdk:8-jdk-alpine替换为openjdk:8-jdk-slim这类使用glibc的基础镜像,降低musl libc带来的TLS兼容性问题,但该方案无法100%解决旧版本Agent的协商缺陷,仅作为临时兜底。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 16:33:26