Bagaimana cara mengirim data jejak ke Jaeger melalui OpenTelemetry di aplikasi front end?

Aug 17 2020

Latar Belakang

Saya mencoba melacak di aplikasi ujung depan.

Saya tidak dapat menggunakan @ opentelemetry / eksportir-jaeger karena saya percaya itu adalah untuk Node.js kembali end aplikasi hanya .

Jadi saya mencoba menggunakan @ opentelemetry / eksportir-kolektor .

1. Berhasil mencetak di konsol browser

Pertama saya mencoba mencetak data jejak di konsol browser. Dan kode di bawah ini berhasil mencetak data jejak.

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. Gagal meneruskan ke Jaeger

Sekarang saya ingin meneruskannya ke Jaeger.

Saya menjalankan Jaeger all-in-one oleh

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

Berdasarkan dokumen port Jaeger , saya mungkin dapat menggunakan kedua port ini (jika port lain berfungsi, itu akan bagus juga!):

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

Kemudian saya lebih jauh menemukan info lebih lanjut tentang port ini :

Format Zipkin (stabil)

Jaeger Collector juga dapat menerima span dalam beberapa format data Zipkin, yaitu JSON v1 / v2 dan Thrift. Kolektor perlu dikonfigurasi untuk mengaktifkan server HTTP Zipkin, misalnya pada port 9411 yang digunakan oleh kolektor Zipkin. Server mengaktifkan dua titik akhir yang mengharapkan permintaan 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.

Saya memperbarui kode saya menjadi

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

Namun, saya mendapat permintaan buruk untuk titik akhir v1 dan v2 tanpa respons yang dikembalikan

POST http: // localhost: 9411 / api / v1 / spans 400 (Permintaan Buruk)

POST http: // localhost: 9411 / api / v2 / spans 400 (Permintaan Buruk)

Adakah ide bagaimana saya bisa membuat format permintaan benar? Terima kasih

PEMBARUAN (8/19/2020)

Saya pikir Andrew benar bahwa saya harus menggunakan kolektor OpenTelemetry. Saya juga mendapat bantuan dari Valentin Marchaud dan Deniz Gurkaynak di Gitter. Cukup tambahkan tautan di sini untuk lebih banyak orang yang mengalami masalah yang sama:https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

Solusi kerja terakhir saya diposting di https://stackoverflow.com/a/63489195/2000548

Jawaban

Andrew Aug 18 2020 at 00:36

Masalahnya, Anda harus menggunakan pengumpul opentelemetri jika Anda menggunakan pengekspor opentelemetri.

Tolong lihat skema dalam lampiran

Juga saya membuat intisari, yang akan membantu Anda mengatur, silakan lihat

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

(cukup setel nilainya, ekspor ke jaeger-all-in-one alih-alih pisahkan + cassandra, dll)