पिछली पोस्ट में, मैंने ग्राफाना क्लाउड में ओपनटेलीमेट्री डेटा को शूट किया, सहेजा और देखा।
यदि आप ग्राफाना क्लाउड के मुफ्त संस्करण का उपयोग करते हैं, तो आपको प्रति माह लगभग 50 जीबी लॉग और ट्रेस मिलते हैं। यदि यह एक ऐसी सेवा है जो निशान जमा नहीं करती है (या लॉग रिकॉर्ड नहीं करती है) क्योंकि बहुत सारे उपयोगकर्ता नहीं हैं, तो आप बस इसका उपयोग कर सकते हैं, लेकिन यदि आप इसे छोटे पैमाने पर पेश करते हैं, तो मुझे डर है कि बहुत सारे लॉग जमा हो जाएंगे और विस्फोट।सैम्पलिंग
सैंपलिंग की जरूरत क्यों?
उपरोक्त चित्र में सभी वृत्तों (ट्रेस) को सहेजने की कोई आवश्यकता नहीं है। यह केवल महत्वपूर्ण निशानों (त्रुटियों, या बहुत लंबे निष्पादन समय) और संपूर्ण के कुछ नमूने (कुछ ठीक निशान) को संग्रहीत करने के लिए पर्याप्त है।
नमूने के प्रकार
सिर का नमूना
'@opentelemetry/sdk-trace-node' से { TraceIdRatioBasedSampler } आयात करें;
स्थिरांक नमूना प्रतिशत = 0.1;
स्थिरांक एसडीके = नया नोडएसडीके({
// अन्य एसडीके कॉन्फ़िगरेशन पैरामीटर यहां जाते हैं
नमूना: नया TraceIdRatioBasedSampler(samplePercentage);
});
import { TraceIdRatioBasedSampler } from '@opentelemetry/sdk-trace-node'; const samplePercentage = 0.1; const sdk = new NodeSDK({ // Other SDK configuration parameters go here sampler: new TraceIdRatioBasedSampler(samplePercentage), });
निष्पादन करना कठिन है क्योंकि नमूने के लिए स्टेटफुल स्थिति बनाए रखनी होगी।
टेल सैम्पलर विक्रेता-विशिष्ट हो सकता है।
अवतार
this._spanProcessor.onEnd(span); केवल तभी जब status.code 2 (त्रुटि) हो या अनुपात संभावना जीत रही हो।
पर कॉल करके निर्यात करें
import { Context } from "@opentelemetry/api"; import { SpanProcessor, ReadableSpan, Span, } from "@opentelemetry/sdk-trace-node"; /** * Sampling span processor (including all error span and ratio of other spans) */ export class SamplingSpanProcessor implements SpanProcessor { constructor( private _spanProcessor: SpanProcessor, private _ratio: number ) {} /** * Forces to export all finished spans */ forceFlush(): Promisemain.ts में स्पैनप्रोसेसर अपडेट करें।{ return this._spanProcessor.forceFlush(); } onStart(span: Span, parentContext: Context): void { this._spanProcessor.onStart(span, parentContext); } shouldSample(traceId: string): boolean { let accumulation = 0; for (let idx = 0; idx { return this._spanProcessor.shutdown(); } }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3