Im vorherigen Beitrag habe ich Opentelemetry-Daten in Grafana Cloud aufgenommen, gespeichert und angezeigt.
Wenn Sie die kostenlose Version von Grafana Cloud nutzen, erhalten Sie etwa 50 GB Protokolle und Traces pro Monat. Wenn es sich um einen Dienst handelt, der keine Spuren sammelt (oder keine Protokolle aufzeichnet), weil nicht viele Benutzer vorhanden sind, können Sie ihn einfach verwenden. Wenn Sie ihn jedoch in kleinem Maßstab einführen, befürchte ich, dass sich zu viele Protokolle ansammeln und explodieren.Probenahme
Warum brauchen Sie eine Probenahme?
Es ist nicht erforderlich, alle Kreise (Spur) im Bild oben zu speichern. Es reicht aus, nur wichtige Traces (Fehler oder zu lange Ausführungszeit) und einige für das Ganze repräsentative Beispiele (einige der OK-Traces) zu speichern.
Arten der ProbenahmeSampling kann grob in Head Sampling und Tail Sampling unterteilt werden.
import { TraceIdRatioBasedSampler } from '@opentelemetry/sdk-trace-node';
const samplePercentage = 0,1;
const sdk = neues NodeSDK({
// Weitere SDK-Konfigurationsparameter finden Sie hier
Sampler: new 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), });
Nachteil
Lassen Sie uns Tail Sampling implementieren, indem wir einen benutzerdefinierten Span-Prozessor implementieren.
import { Context } from „@opentelemetry/api“; importieren { SpanProcessor, ReadableSpan, Spanne, } von „@opentelemetry/sdk-trace-node“; /** * Sampling-Span-Prozessor (einschließlich aller Fehlerspannen und Verhältnisse anderer Spannen) */ Die Exportklasse SamplingSpanProcessor implementiert SpanProcessor { Konstruktor( privater _spanProcessor: SpanProcessor; private_ratio: Zahl ) {} /** * Erzwingt den Export aller fertigen Abschnitte */ forceFlush(): Promise
OtelSDK-Update
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(): Promise{ 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(); } }
spanProcessors: [ newSamplingSpanProcessor( neuer BatchSpanProcessor(traceExporter); Beispielprozentsatz ), ],
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3