프런트 엔드 앱에서 OpenTelemetry를 통해 추적 데이터를 Jaeger로 보내는 방법은 무엇입니까?

Aug 17 2020

배경

프런트 엔드 앱에서 추적하려고합니다.

Node.js 백엔드 앱 전용이라고 믿기 때문에 @ 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 올인원을 실행 중 입니다.

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 포트 문서 에 따라 다음 두 포트를 사용할 수 있습니다 (다른 포트가 작동하는 경우에도 좋습니다!).

14250   HTTP    collector   accept model.proto
9411    HTTP    collector   Zipkin compatible endpoint (optional)

그런 다음 이 포트에 대한 추가 정보를 찾았습니다 .

Zipkin 형식 (안정적)

Jaeger Collector는 JSON v1 / v2 및 Thrift와 같은 여러 Zipkin 데이터 형식으로 스팬을 허용 할 수도 있습니다. Collector는 Zipkin 수집기가 사용하는 포트 9411에서 Zipkin HTTP 서버를 활성화하도록 구성되어야합니다. 서버는 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 수집기를 사용해야한다고 생각합니다. 또한 Gitter의 Valentin Marchaud와 Deniz Gurkaynak의 도움을 받았습니다. 동일한 문제를 만나는 다른 사람들을 위해 여기에 링크를 추가하십시오.https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

내 최종 작업 솔루션은 https://stackoverflow.com/a/63489195/2000548

답변

Andrew Aug 18 2020 at 00:36

오픈 텔레 메 트리 익스포터를 사용한다면 오픈 텔레 메 트리 컬렉터를 사용해야합니다.

Pls는 첨부 파일의 스키마를 참조하십시오.

또한 pls를 설정하는 데 도움이되는 요점을 만들었습니다.

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

(값을 조정하고 별도의 + 카산드라 대신 jaeger-all-in-one으로 내보내십시오)