在上一篇文章中,我在 Grafana Cloud 中拍攝、保存和查看了 Opentelemetry 資料
。如果您使用免費版本的 Grafana Cloud,您每月可以獲得約 50GB 的日誌和追蹤。如果是因為使用者不多所以不累積痕跡(或不記錄日誌)的服務,直接使用就可以了,但是如果小範圍引入的話,恐怕會累積太多的日誌而無法使用。爆炸。
取樣為什麼需要抽樣
上圖中的所有圓圈(軌跡)無需保存。僅儲存重要的追蹤(錯誤或太長的執行時間)和一些代表整體的樣本(一些正常的追蹤)就足夠了。
抽樣類型
頭部採樣
從'@opentelemetry/sdk-trace-node'導入{TraceIdRatioBasedSampler};
常量樣本百分比 = 0.1;
const sdk = 新 NodeSDK({
// 其他SDK設定參數放這裡
取樣器:新的 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), });
。
SamplingSpanProcessor 實現
從“@opentelemetry/api”導入{Context};
進口 {
跨度處理器,
可讀跨度,
跨度,
來自“@opentelemetry/sdk-trace-node”;
/**
* 採樣跨度處理器(包括所有誤差跨度和其他跨度的比率)
*/
導出類別 SamplingSpanProcessor 實作 SpanProcessor {
構造函數(
私有_spanProcessor:SpanProcessor;
私人比:數字
){}
/**
* 強制導出所有完成的跨度
*/
ForceFlush(): Promise
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(); } }
OtelSDK更新
跨度處理器:[
新的取樣跨度處理器(
新的 BatchSpanProcessor(traceExporter);
樣本百分比
),
],
spanProcessors: [ new SamplingSpanProcessor( new BatchSpanProcessor(traceExporter), samplePercentage ), ],
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3