我试图通过@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
响应:
1条答案
按热度按时间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中使用如下内容:
这里描述了一个更详细的示例(尽管它是OTel收集器和nginx的组合):https://opentelemetry.io/docs/instrumentation/js/exporters/#securely-expose-your-collector
对于(2),您可以使用适用于所有基于http的接收器的a feature设置OTel收集器: