如何通过前端应用程序中的 OpenTelemetry 将跟踪数据发送到 Jaeger?
How to send trace data to Jaeger through OpenTelemetry in front end app?
背景
我正在尝试在前端应用程序中进行跟踪。
我无法使用 @opentelemetry/exporter-jaeger since I believe it is for Node.js back end app only。
所以我正在尝试使用 @opentelemetry/exporter-collector。
1。浏览器控制台打印成功
首先我尝试在浏览器控制台中打印跟踪数据。和
下面的代码成功打印了跟踪数据。
import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { SimpleSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';
const provider = new WebTracerProvider({ plugins: [new DocumentLoad()] });
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.register();
2。无法转发到 Jaeger
现在我想将它们转发给 Jaeger。
我是 运行 Jaeger all-in-one
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:1.18
在 Jaeger port document 的基础上,我可能可以使用这两个端口(如果其他端口可用,那也很棒!):
14250 HTTP collector accept model.proto
9411 HTTP collector Zipkin compatible endpoint (optional)
然后我进一步发现more info about this port:
Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format,
namely JSON v1/v2 and Thrift. The Collector needs to be configured to
enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin
collectors. The server enables two endpoints that expect POST
requests:
/api/v1/spans for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
/api/v2/spans for submitting spans in Zipkin JSON v2.
我将代码更新为
import { CollectorTraceExporter, CollectorProtocolNode } from '@opentelemetry/exporter-collector';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { SimpleSpanProcessor } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';
const provider = new WebTracerProvider({ plugins: [new DocumentLoad()] });
// The config below currently has issue
const exporter = new CollectorTraceExporter({
serviceName: 'my-service',
protocolNode: CollectorProtocolNode.HTTP_JSON,
url: 'http://localhost:9411/api/v1/spans', // Also tried v2
});
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();
但是,我收到了对 v1 和 v2 端点的错误请求,没有返回任何响应正文
POST http://localhost:9411/api/v1/spans 400 (Bad Request)
POST http://localhost:9411/api/v2/spans 400 (Bad Request)
知道如何使请求格式正确吗?谢谢
更新(2020 年 8 月 19 日)
我认为 Andrew 说得对,我应该使用 OpenTelemetry 收集器。我还得到了 Valentin Marchaud 和 Deniz Gurkaynak 的一些帮助
在吉特。只需在此处为遇到相同问题的其他人添加 link:
https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a
我的最终工作解决方案发布在
事实是,如果您使用 opentelemetry exporter,您应该使用 opentelemetry 收集器。
请参阅附件中的架构
我还创建了一个要点,可以帮助您设置
请看
https://gist.github.com/AndrewGrachov/11a18bc7268e43f1a36960d630a0838f
(只需调整值,导出到 jaeger-all-in-one 而不是单独的 + cassandra 等)
背景
我正在尝试在前端应用程序中进行跟踪。
我无法使用 @opentelemetry/exporter-jaeger since I believe it is for Node.js back end app only。
所以我正在尝试使用 @opentelemetry/exporter-collector。
1。浏览器控制台打印成功
首先我尝试在浏览器控制台中打印跟踪数据。和 下面的代码成功打印了跟踪数据。
import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { SimpleSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';
const provider = new WebTracerProvider({ plugins: [new DocumentLoad()] });
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.register();
2。无法转发到 Jaeger
现在我想将它们转发给 Jaeger。
我是 运行 Jaeger all-in-one
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 9411:9411 \
jaegertracing/all-in-one:1.18
在 Jaeger port document 的基础上,我可能可以使用这两个端口(如果其他端口可用,那也很棒!):
14250 HTTP collector accept model.proto
9411 HTTP collector Zipkin compatible endpoint (optional)
然后我进一步发现more info about this port:
Zipkin Formats (stable)
Jaeger Collector can also accept spans in several Zipkin data format, namely JSON v1/v2 and Thrift. The Collector needs to be configured to enable Zipkin HTTP server, e.g. on port 9411 used by Zipkin collectors. The server enables two endpoints that expect POST requests:
/api/v1/spans for submitting spans in Zipkin JSON v1 or Zipkin Thrift format. /api/v2/spans for submitting spans in Zipkin JSON v2.
我将代码更新为
import { CollectorTraceExporter, CollectorProtocolNode } from '@opentelemetry/exporter-collector';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { SimpleSpanProcessor } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';
const provider = new WebTracerProvider({ plugins: [new DocumentLoad()] });
// The config below currently has issue
const exporter = new CollectorTraceExporter({
serviceName: 'my-service',
protocolNode: CollectorProtocolNode.HTTP_JSON,
url: 'http://localhost:9411/api/v1/spans', // Also tried v2
});
provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();
但是,我收到了对 v1 和 v2 端点的错误请求,没有返回任何响应正文
POST http://localhost:9411/api/v1/spans 400 (Bad Request)
POST http://localhost:9411/api/v2/spans 400 (Bad Request)
知道如何使请求格式正确吗?谢谢
更新(2020 年 8 月 19 日)
我认为 Andrew 说得对,我应该使用 OpenTelemetry 收集器。我还得到了 Valentin Marchaud 和 Deniz Gurkaynak 的一些帮助 在吉特。只需在此处为遇到相同问题的其他人添加 link: https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a
我的最终工作解决方案发布在
事实是,如果您使用 opentelemetry exporter,您应该使用 opentelemetry 收集器。
请参阅附件中的架构
我还创建了一个要点,可以帮助您设置 请看
https://gist.github.com/AndrewGrachov/11a18bc7268e43f1a36960d630a0838f
(只需调整值,导出到 jaeger-all-in-one 而不是单独的 + cassandra 等)