【问题标题】:How to send trace data to Jaeger through OpenTelemetry in front end app?如何通过前端应用程序中的 OpenTelemetry 向 Jaeger 发送跟踪数据?
【发布时间】:2020-12-06 04:20:05
【问题描述】:

背景

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

由于I believe it is for Node.js back end app only,我无法使用@opentelemetry/exporter-jaeger

所以我尝试使用@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 by

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 数据格式的 span, 即 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(错误请求)

知道如何使请求格式正确吗?谢谢

更新(2020 年 8 月 19 日)

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

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

【问题讨论】:

    标签: javascript docker zipkin jaeger open-telemetry


    【解决方案1】:

    问题是,如果你使用 opentelemetry exporter,你应该使用 opentelemetry collector。

    请参阅附件中的架构

    我还创建了一个要点,它将帮助您设置 请看

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

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

    【讨论】:

    • 谢谢安德鲁!只是想确认一下,根据这张图表,你的意思是我的前端应用程序和 Jaeger 收集器之间需要一个 OpenTelemetry 收集器吗?
    • 是的,otel 收藏家不费吹灰之力 - 一站式满足您的所有需求。甚至 jaeger 的创作者也为之动容medium.com/jaegertracing/…
    • 我会假设您指的是github.com/open-telemetry/opentelemetry-collector,这是很多信息。我会花一些时间尝试并报告。再次感谢!
    • 为了为未来的人们节省一些时间,我的最终工作解决方案发布在stackoverflow.com/a/63489195/2000548
    猜你喜欢
    • 2022-08-04
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多