Làm thế nào để gửi dữ liệu theo dõi đến Jaeger thông qua OpenTelemetry trong ứng dụng giao diện người dùng?

Aug 17 2020

Lý lịch

Tôi đang cố gắng theo dõi trong một ứng dụng giao diện người dùng.

Tôi không thể sử dụng @ opentelemetry / export-jaeger vì tôi tin rằng ứng dụng này chỉ dành cho ứng dụng Node.js back end .

Vì vậy, tôi đang cố gắng sử dụng @ opentelemetry / exporter-collector .

1. In thành công trong bảng điều khiển trình duyệt

Đầu tiên, tôi đã thử in dữ liệu theo dõi trong bảng điều khiển của trình duyệt. Và đoạn mã dưới đây in thành công dữ liệu theo dõi.

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. Không chuyển tiếp được đến Jaeger

Bây giờ tôi muốn chuyển chúng đến Jaeger.

Tôi đang chạy Jaeger all-in-one bởi

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

Dựa trên tài liệu về cổng Jaeger , tôi có thể sử dụng hai cổng này (nếu các cổng khác hoạt động, điều đó cũng sẽ rất tuyệt!):

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

Sau đó, tôi tìm thấy thêm thông tin về cổng này :

Định dạng Zipkin (ổn định)

Jaeger Collector cũng có thể chấp nhận các khoảng thời gian ở một số định dạng dữ liệu Zipkin, cụ thể là JSON v1 / v2 và Thrift. Bộ sưu tập cần được định cấu hình để kích hoạt máy chủ Zipkin HTTP, ví dụ: trên cổng 9411 được sử dụng bởi bộ sưu tập Zipkin. Máy chủ cho phép hai điểm cuối yêu cầu 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.

Tôi đã cập nhật mã của mình thành

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();

Tuy nhiên, tôi nhận được yêu cầu không hợp lệ cho cả điểm cuối v1 và v2 mà không có bất kỳ nội dung phản hồi nào được trả về

ĐĂNG http: // localhost: 9411 / api / v1 / spans 400 (Yêu cầu không hợp lệ)

ĐĂNG http: // localhost: 9411 / api / v2 / spans 400 (Yêu cầu không hợp lệ)

Bất kỳ ý tưởng làm thế nào tôi có thể làm cho định dạng yêu cầu chính xác? Cảm ơn

CẬP NHẬT (19/8/2020)

Tôi nghĩ Andrew đúng khi tôi nên sử dụng bộ sưu tập OpenTelemetry. Tôi cũng nhận được sự giúp đỡ từ Valentin Marchaud và Deniz Gurkaynak tại Gitter. Chỉ cần thêm liên kết ở đây cho những người khác gặp cùng vấn đề:https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

Giải pháp làm việc cuối cùng của tôi được đăng tại https://stackoverflow.com/a/63489195/2000548

Trả lời

Andrew Aug 18 2020 at 00:36

Điều đó là, bạn nên sử dụng bộ sưu tập phép đo thị lực nếu bạn sử dụng nhà xuất khẩu máy đo độ mờ.

Xin vui lòng xem lược đồ trong tệp đính kèm

Ngoài ra, tôi đã tạo một ý chính, điều này sẽ giúp bạn thiết lập, vui lòng xem

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

(chỉ cần điều chỉnh các giá trị, xuất sang jaeger-all-in-one thay vì + cassandra riêng biệt, v.v.)