"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > NestJS + Opentelemetry (muestreo)

NestJS + Opentelemetry (muestreo)

Publicado el 2024-08-23
Navegar:616

Nube de Grafana

En la publicación anterior, grabé, guardé y vi datos de Opentelemetry en Grafana Cloud

.

Si utiliza la versión gratuita de Grafana Cloud, obtiene aproximadamente 50 GB de registros y seguimientos por mes. Si es un servicio que no acumula rastros (o no registra registros) porque no hay muchos usuarios, puedes usarlo simplemente, pero si lo introduces a pequeña escala, me temo que se acumularán demasiados registros y explotar

Muestreo

Muestreo significa extraer una parte del todo. Como resultado, la tarea es reducir la cantidad de datos de telemetría almacenados.

¿Por qué es necesario tomar muestras?

¿Por qué es necesario el muestreo?

NestJS   Opentelemetry (Sampling)

No es necesario guardar todos los círculos (trazado) en la imagen de arriba. Basta con almacenar sólo las trazas importantes (errores o tiempos de ejecución demasiado largos) y algunas muestras representativas del conjunto (algunas de las trazas correctas

).

Tipos de muestreo

El muestreo se puede dividir en términos generales en muestreo de cabeza y muestreo de cola.

Muestreo de cabeza

  • Se refiere al muestreo desde el principio. Un ejemplo típico es el muestreo simplemente probabilístico. Sólo queda el 10% del rastro total y el resto no se rastrea.

JavaScript

TraceIdRatioBasedSampler se proporciona de forma predeterminada.

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

desventaja

  • A veces se dejan rastros importantes porque dejan cosas sin preguntar.

Muestreo de cola

  • Muestreo desde atrás. En este momento, como hay mucha información disponible, puedes filtrarla según la lógica deseada.

  • Por ejemplo, los seguimientos de errores siempre se muestrean.

  • Por lo general, el muestreo se realiza después de que se hayan recibido todos los rastros del recolector.

desventaja

  • La implementación puede ser difícil. Es algo que siempre debe cambiarse cuando el sistema cambia y las condiciones cambian

  • .
  • Difícil de realizar porque se debe mantener el estado con estado para el muestreo.

  • Tail Sampler puede ser específico del proveedor.

avatar

Implementemos Tail Sampling implementando un procesador de tramo personalizado

.

Implementación de SamplingSpanProcessor

Crear archivo 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); solo cuando status.code es 2 (Error) o la probabilidad de proporción es ganadora. Exportar llamando a

Actualización de OtelSDK

Actualizar spanProcessors en main.ts.

  spanProcessors: [
    new SamplingSpanProcessor(
      new BatchSpanProcessor(traceExporter),
      samplePercentage
    ),
  ],
Declaración de liberación Este artículo se reproduce en: https://dev.to/siisee11/nestjs-opentelemetry-sampling-2ome?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3