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

使用OpenTelemetry导出追踪数据到Jaeger时遭遇CORS问题求助

解决浏览器客户端向Jaeger Collector发送追踪数据的CORS问题

问题原因

你在客户端请求头里设置Access-Control-Allow-Headers是无效的——这个是服务器返回的响应头,用来告知浏览器允许的请求头类型,不是客户端需要发送的请求头。Jaeger Collector默认没有配置CORS支持,因为它设计为接收服务端SDK的请求,而非直接暴露给浏览器,所以浏览器会拦截跨域请求。


解决方案

方案1:使用后端代理(推荐,符合生产环境最佳实践)

不要让浏览器直接请求Jaeger Collector,而是搭建一个简单的后端代理,由代理转发请求到Collector,避免跨域问题。

比如用Node.js + Express实现代理:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();

// 代理Jaeger Collector的追踪接口
app.use('/api/traces', createProxyMiddleware({
  target: 'http://localhost:14268',
  changeOrigin: true,
}));

app.listen(3000, () => {
  console.log('代理服务运行在 http://localhost:3000');
});

然后修改客户端代码中的exporter URL:

const collector = new CollectorTraceExporter({
  url: 'http://localhost:3000/api/traces',
  headers: {
    'Content-Type': 'application/json',
    'X-CSRF': '1',
  },
});

方案2:升级Jaeger并配置CORS(仅用于测试环境)

如果你只是在本地测试,想直接让Collector支持CORS,需要先升级Jaeger版本(你当前用的1.9版本太旧,缺乏CORS配置能力),再通过环境变量配置CORS规则。

修改docker-compose.yml:

jaeger:
    container_name: jaeger
    image: jaegertracing/all-in-one:latest # 升级到最新版本
    environment:
      COLLECTOR_OTLP_ENABLED: true
      # 配置允许的跨域来源,*表示允许所有(仅测试用)
      COLLECTOR_HTTP_CORS_ALLOWED_ORIGINS: "*"
      # 配置允许的请求头
      COLLECTOR_HTTP_CORS_ALLOWED_HEADERS: "Content-Type,X-CSRF"
      # 配置允许的请求方法
      COLLECTOR_HTTP_CORS_ALLOWED_METHODS: "POST,OPTIONS"
    ports:
      - 16686:16686 # Jaeger UI
      - 14268:14268 # Collector
      - 4317:4317 # OpenTelemetry GRPC
      - 4318:4318 # OpenTelemetry HTTP(新增,对应OTLP HTTP协议)
      - 6831:6831 # OpenTelemetry HTTP

重启容器后,浏览器的跨域请求就会被允许。

额外建议:更换为最新的OTLP exporter

@opentelemetry/exporter-collector已被弃用,建议使用官方推荐的@opentelemetry/exporter-trace-otlp-http,适配最新的OTLP标准:

const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');

const exporter = new OTLPTraceExporter({
  url: 'http://localhost:4318/v1/traces', // OTLP HTTP的默认接口
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:35:26