Comment envoyer des données de trace à Jaeger via OpenTelemetry dans l'application frontale?
Contexte
J'essaie de tracer dans une application frontale.
Je ne suis pas en mesure d'utiliser @ opentelemetry / exportateur jaeger depuis que je crois qu'il est pour l' application de la fin de l' arrière Node.js seulement .
J'essaye donc d'utiliser @ opentelemetry / exporter-collector .
1. Réussir à imprimer dans la console du navigateur
J'ai d'abord essayé d'imprimer les données de trace dans la console du navigateur. Et le code ci-dessous réussit à imprimer les données de trace.
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. Échec de la transmission à Jaeger
Maintenant, je veux les transmettre à Jaeger.
Je lance Jaeger tout-en-un par
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
Sur la base du document de port Jaeger , je pourrais peut-être utiliser ces deux ports (si d'autres ports fonctionnent, ce sera bien aussi!):
14250 HTTP collector accept model.proto
9411 HTTP collector Zipkin compatible endpoint (optional)
Ensuite, j'ai trouvé plus d'informations sur ce port :
Formats Zipkin (stables)
Jaeger Collector peut également accepter des spans dans plusieurs formats de données Zipkin, à savoir JSON v1 / v2 et Thrift. Le collecteur doit être configuré pour activer le serveur HTTP Zipkin, par exemple sur le port 9411 utilisé par les collecteurs Zipkin. Le serveur active deux points de terminaison qui attendent des requêtes 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.
J'ai mis à jour mes codes pour
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();
Cependant, j'ai reçu une mauvaise demande pour les points de terminaison v1 et v2 sans aucun corps de réponse renvoyé
POST http: // localhost: 9411 / api / v1 / spans 400 (demande incorrecte)
POST http: // localhost: 9411 / api / v2 / spans 400 (demande incorrecte)
Une idée comment puis-je rendre le format de la demande correct? Merci
MISE À JOUR (19/08/2020)
Je pense qu'Andrew a raison de dire que je devrais utiliser le collecteur OpenTelemetry. J'ai également obtenu de l'aide de Valentin Marchaud et Deniz Gurkaynak à Gitter. Ajoutez simplement le lien ici pour d'autres personnes qui rencontrent le même problème:https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a
Ma solution de travail finale publiée sur https://stackoverflow.com/a/63489195/2000548
Réponses
Le fait est que vous devez utiliser le collecteur opentelemetry si vous utilisez un exportateur opentelemetry.
Pls voir le schéma en pièce jointe
J'ai également créé un résumé, qui vous aidera à configurer les pls voir
https://gist.github.com/AndrewGrachov/11a18bc7268e43f1a36960d630a0838f
(juste régler les valeurs, exporter vers jaeger-all-in-one au lieu de separé + cassandra, etc.)