Ön uç uygulamasında OpenTelemetry aracılığıyla izleme verileri Jaeger'a nasıl gönderilir?

Aug 17 2020

Arka fon

Bir ön uç uygulamasında izlemeye çalışıyorum.

Ben kullanabilmek için değilim @ opentelemetry / ihracatçı-jaeger beri ben node.js arka uç uygulamasında içindir inanıyoruz .

Bu yüzden @ opentelemetry / exporter-collector'ı kullanmaya çalışıyorum .

1. Tarayıcı konsolunda yazdırmayı başarın

Öncelikle izleme verilerini tarayıcı konsolunda yazdırmayı denedim. Ve aşağıdaki kod, izleme verilerini yazdırmayı başarır.

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'a iletilemedi

Şimdi onları Jaeger'a iletmek istiyorum.

Ben koşuyorum hepsi bir arada Jaeger tarafından

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

Dayanarak Jaeger liman belgede , bu iki bağlantı noktalarını kullanmak mümkün olabilir (çok diğer portlar çalışıyorsanız, bu harika olacak!):

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

Sonra bu bağlantı noktası hakkında daha fazla bilgi buldum :

Zipkin Biçimleri (kararlı)

Jaeger Collector, JSON v1 / v2 ve Thrift gibi birkaç Zipkin veri formatındaki aralıkları da kabul edebilir. Toplayıcının, Zipkin HTTP sunucusunu etkinleştirmek için yapılandırılması gerekir, örneğin Zipkin toplayıcıları tarafından kullanılan 9411 numaralı bağlantı noktasında. Sunucu, POST isteklerini bekleyen iki uç noktayı etkinleştirir:

/api/v1/spans for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
/api/v2/spans for submitting spans in Zipkin JSON v2.

Kodlarımı şu şekilde güncelledim

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

Ancak, herhangi bir yanıt gövdesi döndürülmeden hem v1 hem de v2 uç noktaları için hatalı istek aldım

POST http: // localhost: 9411 / api / v1 / spans 400 (Kötü İstek)

POST http: // localhost: 9411 / api / v2 / spans 400 (Kötü İstek)

İstek biçimini nasıl düzeltebilirim? Teşekkürler

GÜNCELLEME (8/19/2020)

Andrew'un OpenTelemetry koleksiyoncusunu kullanmam gerektiği konusunda haklı olduğunu düşünüyorum. Gitter'de Valentin Marchaud ve Deniz Gürkaynak'tan da yardım aldım. Aynı sorunu yaşayan diğer kişiler için bağlantıyı buraya eklemeniz yeterli:https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

Son çalışma çözümüm şurada yayınlandı: https://stackoverflow.com/a/63489195/2000548

Yanıtlar

Andrew Aug 18 2020 at 00:36

Açıkçası, opentelemetri dışa aktarıcı kullanıyorsanız, opentelemetri toplayıcı kullanmalısınız.

Pls ekteki şemaya bakın

Ayrıca kurulum yapmanıza yardımcı olacak bir özet oluşturdum, lütfen bakın

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

(sadece değerleri ayarlayın, ayrı + cassandra yerine jaeger-all-in-one'a aktarın, vb.)