docker 开放遥测CORS issue exporting trace data to Jaeger

mspsb9vt  于 2023-05-22  发布在  Docker
关注(0)|答案(1)|浏览(187)

我试图通过@opentelemetry/exporter-collector将跟踪数据从客户端应用程序发送到jaeger-collector,但调用被CORS阻止。我试图设置exporter-collector头来解决这个问题,但它没有帮助。我不熟悉Docker,所以我不知道如何正确配置它。Jaeger UI正在按预期运行。
客户:

const collector = new CollectorTraceExporter({
  url: 'http://localhost:14268/api/traces',
  headers: {
    'Content-Type': 'application/json',
    'Access-Control-Allow-Headers': '*',
    'X-CSRF': '1',
  },
});
provider.addSpanProcessor(new SimpleSpanProcessor(collector));

docker-compose.yml

jaeger:
    container_name: jaeger
    image: jaegertracing/all-in-one:1.9
    environment:
      COLLECTOR_OTLP_ENABLED: true
    ports:
      - 16686:16686 # Jaeger UI
      - 14268:14268 # Collector
      - 4317:4317 # OpenTelemetry GRPC
      - 6831:6831 # OpenTelemetry HTTP

响应:

sirbozc5

sirbozc51#

Access-Control-Allow-Headers是一个响应头,所以它应该由接收端发送(在您的情况下是Jaeger)。Jaeger支持zipkin(https://www.jaegertracing.io/docs/latest/cli/参见'--collector.zipkin. allowed-headers'),但不支持OTLP。
现在你可以做两件事:
1.在你的应用和jaeger之间放置一个反向代理(nginx,apache,...),让代理做CORS处理
1.使用带有CORS标头配置的OpenTelemetry采集器。
对于(1),你可以在nginx中使用如下内容:

server {
    listen 80 default_server;
    server_name _;
    location / {
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Headers' 'Accept,Accept-Language,Content-Language,Content-Type' always;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://jaeger:4318;
    }
}

这里描述了一个更详细的示例(尽管它是OTel收集器和nginx的组合):https://opentelemetry.io/docs/instrumentation/js/exporters/#securely-expose-your-collector
对于(2),您可以使用适用于所有基于http的接收器的a feature设置OTel收集器:

receivers:
  otlp:
    protocols:
      http:
        include_metadata: true
        cors:
          allowed_origins:
            - https://foo.bar.com
            - https://*.test.com
          allowed_headers:
            - Example-Header
          max_age: 7200

相关问题