फ्रंट एंड ऐप में ओपनटेलीमेट्री के माध्यम से जैगर को ट्रेस डेटा कैसे भेजें?
पृष्ठभूमि
मैं एक फ्रंट एंड ऐप में ट्रेस करने की कोशिश कर रहा हूं।
मैं @ 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
जवाब
बात यह है, अगर आप opentelemetry निर्यातक का उपयोग करते हैं, तो आपको opentelemetry संग्राहक का उपयोग करना चाहिए।
Pls अनुलग्नक में स्कीमा देखें
इसके अलावा, मैंने एक जिस्ट बनाया, जो आपको pls देखने में मदद करेगा
https://gist.github.com/AndrewGrachov/11a18bc7268e43f1a36960d630a0838f
(बस मूल्यों को ट्यून करें, अलग-अलग + कैसंड्रा, आदि के बजाय jaeger-all-in-one में निर्यात करें)