微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过前端应用程序中的OpenTelemetry将跟踪数据发送到Jaeger?

如何解决如何通过前端应用程序中的OpenTelemetry将跟踪数据发送到Jaeger?

背景

我正在尝试在前端应用程序中进行跟踪。

@opentelemetry/exporter-jaeger起,我无法使用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。

我由{p>运行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格式(稳定)

Jaeger Collector也可以接受多种Zipkin数据格式的跨度, 即JSON v1 / v2和Thrift。需要将收集器配置为 启用Zipkin HTTP服务器,例如在Zipkin使用的端口9411上 收藏家。服务器启用了两个需要POST的端点 请求:

/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(错误请求)

POST http:// localhost:9411 / api / v2 / spans 400(错误请求)

任何想法如何使请求格式正确?谢谢

更新(8/19/2020)

我认为Andrew应该使用OpenTelemetry收集器是正确的。我也从Valentin marchaud和Deniz Gurkaynak获得了一些帮助 在吉特。只需在此处添加链接,以便遇到相同问题的其他人: https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

我最终的工作解决方案发布在https://stackoverflow.com/a/63489195/2000548

解决方法

是的,如果使用opentelemetry导出器,则应该使用opentelemetry收集器。

请参阅附件enter image description here中的模式

我还创建了一个要点,它将帮助您进行设置 请参阅

https://gist.github.com/AndrewGrachov/11a18bc7268e43f1a36960d630a0838f

(只需调整值,导出到jaeger-all-in-one,而不是单独的+ cassandra,等等)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。