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

Java OpenTelemetry接入Dynatrace失败:Span导出Canceled问题排查

排查OtlpGrpcSpanExporter上报Dynatrace失败(Canceled错误)的步骤

1. 先核对Dynatrace OTLP核心配置

  • 确认OTLP gRPC端点正确:必须是https://<你的租户ID>.live.dynatrace.com/api/v2/otlp/v1/traces(默认443端口,不用额外添加)
  • API令牌必须拥有Ingest OpenTelemetry traces权限,检查令牌是否拼写正确、未过期
  • 代码里要正确注入这两个参数,示例:
    OtlpGrpcSpanExporter.builder()
        .setEndpoint("https://<租户ID>.live.dynatrace.com/api/v2/otlp/v1/traces")
        .addHeader("Authorization", "Api-Token " + "<你的API令牌>")
        .build();
    

2. 解决最常见的Canceled原因:程序提前终止

OTLP exporter是异步导出的,如果程序直接退出,导出线程会被中断,导致请求Canceled,同时触发线程未终止警告。解决方法:

  • 在程序结束前,手动关闭TracerProvider并等待导出完成:
    // 假设你持有TracerProvider实例
    if (tracerProvider instanceof AutoCloseable) {
        try {
            ((AutoCloseable) tracerProvider).close();
            // 等待3秒确保异步导出完成,可根据实际调整时长
            Thread.sleep(3000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    这一步同时能解决线程未终止的警告。

3. 排查网络/SSL问题

  • 先测试应用所在环境能否访问Dynatrace端点,用curl(返回405是正常的,因为gRPC用HTTP/2,curl默认HTTP/1.1):
    curl -v -H "Authorization: Api-Token <你的令牌>" https://<租户ID>.live.dynatrace.com/api/v2/otlp/v1/traces
    
    如果出现连接超时、SSL错误,说明网络或证书有问题
  • 调试时可临时禁用SSL验证(生产环境绝对不能这么做),排除证书问题:
    OtlpGrpcSpanExporter.builder()
        .setEndpoint(...)
        .addHeader(...)
        .setChannelCredentials(InsecureChannelCredentials.create())
        .build();
    

4. 检查OTLP版本/协议匹配

  • Dynatrace的gRPC和HTTP OTLP端点路径不同,别搞混:gRPC用/api/v2/otlp/v1/traces,HTTP用/api/v2/otlp/http/v1/traces
  • 确保OpenTelemetry SDK版本在1.20以上,避免版本兼容问题

5. 开启gRPC日志抓细节

开启gRPC调试日志,能看到请求失败的具体原因,比如连接失败、权限错误等:

  • 加JVM启动参数:
    -Dgrpc.log.level=DEBUG
    -Djava.util.logging.config.file=logging.properties
    
  • 或者代码里配置:
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    Logger.getLogger("io.grpc").setLevel(Level.FINE);
    

6. 验证Dynatrace端是否正常

用第三方工具直接向Dynatrace发送测试Span,排除平台端问题:

  • 用otel-cli执行以下命令(提前安装otel-cli):
    otel-cli span create \
        --service "test-otel-service" \
        --name "test-dt-span" \
        --endpoint "https://<租户ID>.live.dynatrace.com/api/v2/otlp/v1/traces" \
        --header "Authorization=Api-Token <你的令牌>"
    
    如果能在Dynatrace里看到这个测试Span,说明平台接入正常,问题出在你的Java代码配置上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:47:13