"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > NestJS + Opentelemetria (Amostragem)

NestJS + Opentelemetria (Amostragem)

Publicado em 23/08/2024
Navegar:773

Nuvem Grafana

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

Amostragem significa extrair uma parte do todo. Como resultado, a tarefa é reduzir o número de dados de telemetria armazenados.

Por que precisa de amostragem

Por que a amostragem é necessária?

NestJS   Opentelemetry (Sampling)

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

).

Tipos de amostragem

A amostragem pode ser amplamente dividida em amostragem principal e amostragem final.

Amostragem de cabeça

  • Refere-se à amostragem no início. Um exemplo típico é a amostragem simplesmente probabilística. Restam apenas 10% do rastreamento total e o restante não é rastreado.

JavaScript

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),
});

desvantagem

  • Às vezes, rastros importantes são descartados porque eles descartam coisas sem perguntar.

Amostragem de cauda

  • 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.

desvantagem

  • 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.

avatar

Vamos implementar Tail Sampling implementando um Custom Span Processor

Implementação de SamplingSpanProcessor

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

Atualização do OtelSDK

Atualize spanProcessors em main.ts.

  spanProcessors: [
    new SamplingSpanProcessor(
      new BatchSpanProcessor(traceExporter),
      samplePercentage
    ),
  ],
Declaração de lançamento Este artigo está reproduzido em: https://dev.to/siisee11/nestjs-opentelemetry-sampling-2ome?1 Se houver alguma infração, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

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