फ्रंट एंड ऐप में ओपनटेलीमेट्री के माध्यम से जैगर को ट्रेस डेटा कैसे भेजें?

Aug 17 2020

पृष्ठभूमि

मैं एक फ्रंट एंड ऐप में ट्रेस करने की कोशिश कर रहा हूं।

मैं @ opentelemetry / export-jaeger का उपयोग करने में सक्षम नहीं हूं क्योंकि मेरा मानना ​​है कि यह केवल Node.js बैक एंड ऐप के लिए है ।

इसलिए मैं @ opentelemetry / निर्यातक-कलेक्टर का उपयोग करने की कोशिश कर रहा हूं ।

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 को एक-एक करके चला रहा हूं

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)

फिर मुझे इस पोर्ट के बारे में और जानकारी मिली :

जिप्किन प्रारूप (स्थिर)

जैगर कलेक्टर कई ज़िपक डेटा फॉर्मेट में, JSON v1 / v2 और थ्रिफ्ट को भी स्वीकार कर सकता है। जिप्किन HTTP सर्वर को सक्षम करने के लिए कलेक्टर को कॉन्फ़िगर करने की आवश्यकता है, उदाहरण के लिए जिपक कलेक्टरों द्वारा उपयोग किए जाने वाले पोर्ट 9411 पर। सर्वर दो अंतिम बिंदुओं को सक्षम करता है जो 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 (खराब अनुरोध)

किसी भी विचार मैं अनुरोध प्रारूप को सही कैसे बना सकता हूं? धन्यवाद

अद्यतन (8/19/2020)

मुझे लगता है कि एंड्रयू सही है कि मुझे ओपनटेलमेट्री कलेक्टर का उपयोग करना चाहिए। मुझे ग्रेटर में वैलेंटाइन मरचौड और डेनिज़ गुरकायक से भी कुछ मदद मिली। ऐसे ही लोगों से मिलने के लिए आगे के लिंक को यहाँ जोड़ें:https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

मेरा अंतिम काम समाधान पर तैनात https://stackoverflow.com/a/63489195/2000548

जवाब

Andrew Aug 18 2020 at 00:36

बात यह है, अगर आप opentelemetry निर्यातक का उपयोग करते हैं, तो आपको opentelemetry संग्राहक का उपयोग करना चाहिए।

Pls अनुलग्नक में स्कीमा देखें

इसके अलावा, मैंने एक जिस्ट बनाया, जो आपको pls देखने में मदद करेगा

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

(बस मूल्यों को ट्यून करें, अलग-अलग + कैसंड्रा, आदि के बजाय jaeger-all-in-one में निर्यात करें)