No post anterior, filmei, salvei e visualizei dados do Opentelemetry no Grafana Cloud
.Se você usar a versão gratuita do Grafana Cloud, receberá cerca de 50 GB de logs e rastreamentos por mês. Se for um serviço que não acumula rastros (ou não registra logs) porque não há muitos usuários, você pode simplesmente usá-lo, mas se você introduzi-lo em pequena escala, temo que muitos logs se acumulem e explodir
Amostragem significa extrair uma parte do todo. Como resultado, a tarefa é reduzir o número de dados de telemetria armazenados.
Por que a amostragem é necessária?
Não há necessidade de salvar todos os círculos (traço) da imagem acima. Basta armazenar apenas traços importantes (erros ou tempo de execução muito longo) e algumas amostras representativas do todo (alguns dos traços OK
).A amostragem pode ser amplamente dividida em amostragem principal e amostragem final.
TraceIdRatioBasedSampler é fornecido por padrão.
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), });
Amostragem de trás. Neste momento, como há muita informação disponível, você pode filtrá-la de acordo com a lógica desejada.
Por exemplo, rastreamentos de erro são sempre amostrados.
Normalmente, a amostragem é realizada após todos os traços terem sido recebidos do coletor.
A implementação pode ser difícil. É algo que sempre precisa ser mudado quando o sistema muda e as condições mudam
Difícil de executar porque o estado com estado deve ser mantido para amostragem.
Tail Sampler pode ser específico do fornecedor.
Vamos implementar Tail Sampling implementando um Custom Span Processor
Criar arquivo sampling-span-processor.ts
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(); } }
this._spanProcessor.onEnd(span); somente quando status.code for 2 (Erro) ou a proporção de probabilidade for vencedora. Exporte chamando
Atualize spanProcessors em main.ts.
spanProcessors: [ new SamplingSpanProcessor( new BatchSpanProcessor(traceExporter), samplePercentage ), ],
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3