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

使用OpenTelemetry OTLP HTTP无法连接New Relic的排查求助

解决OpenTelemetry OTLP HTTP向New Relic发送追踪的连接错误

以下是可能导致"client error (Connect)"的常见遗漏点及修复方案:

1. 端点URL配置错误

New Relic的OTLP HTTP端点分区域:

  • 美国区域:https://otlp.nr-data.net:4318/v1/traces
  • 欧盟区域:https://otlp.eu01.nr-data.net:4318/v1/traces
    注意:不要混淆gRPC端口4317,HTTP协议必须用4318端口,且路径必须是/v1/traces

确保代码中with_endpoint设置的是正确的HTTP端点:

let exporter = opentelemetry_otlp::new_exporter()
    .http()
    .with_endpoint("https://otlp.nr-data.net:4318/v1/traces");

2. 缺失New Relic API密钥

New Relic要求请求头携带Api-Key(值为你的New Relic插入密钥),否则会触发连接层面的验证失败。必须在exporter的headers中配置:

use opentelemetry_otlp::WithExportConfig;

let exporter = opentelemetry_otlp::new_exporter()
    .http()
    .with_endpoint("https://otlp.nr-data.net:4318/v1/traces")
    .with_headers(vec![("Api-Key", "YOUR_NEW_RELIC_INSERT_KEY")]);

3. 自定义HyperClient的TLS配置问题

如果使用自定义HyperClient,必须确保它支持HTTPS(New Relic端点是HTTPS):

  • 启用TLS相关特性(比如hyper的tls-rustls)
  • 正确配置根证书,避免证书验证失败

示例正确的TLS客户端配置:

use hyper::{Client, body::Body};
use rustls::ClientConfig;
use rustls_native_certs;

let tls_config = ClientConfig::builder()
    .with_safe_defaults()
    .with_root_certificates(rustls_native_certs::load().expect("Failed to load root certs"))
    .with_no_client_auth();

let client = Client::builder()
    .tls_config(tls_config)
    .expect("Failed to build TLS config")
    .build::<Body>();

// 将该client传入OTLP exporter
let exporter = opentelemetry_otlp::new_exporter()
    .http()
    .with_client(client)
    .with_endpoint("https://otlp.nr-data.net:4318/v1/traces")
    .with_headers(vec![("Api-Key", "YOUR_NEW_RELIC_INSERT_KEY")]);

4. 网络环境限制

检查本地防火墙、代理是否阻止了到4318端口的HTTPS请求。可以用curl测试连通性:

curl -v -H "Api-Key: YOUR_NEW_RELIC_INSERT_KEY" https://otlp.nr-data.net:4318/v1/traces

如果curl返回连接失败,需排查网络规则。

5. 依赖版本兼容性

确保opentelemetry、opentelemetry-otlp、hyper等依赖版本匹配,旧版本可能存在HTTP端点处理bug。建议使用最新稳定版,Cargo.toml示例:

[dependencies]
opentelemetry = { version = "0.21", features = ["std"] }
opentelemetry-otlp = { version = "0.13", features = ["http", "hyper", "tls-rustls"] }
hyper = { version = "1.10", features = ["full"] }
tokio = { version = "1.0", features = ["full"] }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:53:29