«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > NestJS + Opentelemetry (выборка)

NestJS + Opentelemetry (выборка)

Опубликовано 23 августа 2024 г.
Просматривать:342

Графана Облако

В предыдущем посте я снимал, сохранял и просматривал данные Opentelemetry в Grafana Cloud

Если вы используете бесплатную версию Grafana Cloud, вы получаете около 50 ГБ журналов и трассировок в месяц. Если это сервис, который не накапливает трассировки (или не записывает логи), поскольку пользователей не так много, то можно просто использовать его, но если внедрить его в небольших масштабах, боюсь, что накопится слишком много логов и взорваться.

Выборка

Выборка означает выделение части из целого. В результате стоит задача сократить количество хранимых данных телеметрии.

Зачем нужна выборка

Почему необходима выборка?

NestJS   Opentelemetry (Sampling)

Сохранять все кружочки (следы) на картинке выше не нужно. Достаточно хранить только важные трассировки (ошибки или слишком долгое время выполнения) и несколько образцов, представляющих целое (некоторые трассировки ОК

).

Типы выборки

Сэмплирование можно условно разделить на начальную и хвостовую выборку.

Отбор проб головы

  • Относится к выборке в самом начале. Типичным примером является просто вероятностная выборка. Остается только 10% от общего количества трассировок, а остальное не отслеживается.

Javascript

TraceIdRatioBasedSampler предоставляется по умолчанию.

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

недостаток

  • Иногда важные следы удаляются, потому что они бросают вещи без спроса.

Выборка хвоста

  • Сэмпл со спины. В настоящее время, поскольку информации доступно много, вы можете фильтровать ее по желаемой логике.

  • Например, всегда выполняется выборка трассировок ошибок.

  • Обычно выборка производится после того, как от коллектора получены все трассы.

недостаток

  • Реализация может оказаться сложной. Это то, что всегда необходимо менять, когда меняется система и условия.

  • Сложно выполнить, поскольку для выборки необходимо поддерживать состояние с отслеживанием состояния.

  • Tail Sampler может зависеть от поставщика.

аватар

Давайте реализуем хвостовую выборку, реализовав процессор пользовательского диапазона

Реализация SamplingSpanProcessor

Создать файл sample-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); только тогда, когда status.code равен 2 (ошибка) или вероятность выигрыша. Экспортируйте, вызвав

Обновление OtelSDK

Обновить spanProcessors в main.ts.

  spanProcessors: [
    new SamplingSpanProcessor(
      new BatchSpanProcessor(traceExporter),
      samplePercentage
    ),
  ],
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/siisee11/nestjs-opentelemetry-sampling-2ome?1. Если обнаружено какое-либо нарушение прав, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3