ホームページ  >  記事  >  ウェブフロントエンド  >  NestJS + Opentelemetry (サンプリング)

NestJS + Opentelemetry (サンプリング)

PHPz
PHPzオリジナル
2024-08-19 17:16:03728ブラウズ

Grafana Cloud

以前の投稿でGrafana CloudにOpentelemetry dataを撃って保存して見ることをした。

グラパナクラウド無料版を使用すると、月にログとトレースに50GB程度を与える。ユーザーがいくらなくてTraceがあまり積み重ねる(あるいはログを枯渇する)サービスならばそのまま使用してもよいが、少し規模がある状態で導入すればログがあまりにも積み重ねてしまうかと怖い。

Sampling

Samplingとは全体から一部を抜いて使うものだ。その結果、保存されるテレメトリデータの数を減らす作業です。

Why need Sampling

サンプリングはなぜ必要ですか?

上の図ですべての円(トレース)を保存する必要はありません。重要なトレース(エラー、またはあまりにも実行時間が長い)と全体を代表する一部のサンプル(OK traceの一部)だけを保存すれば十分です。 NestJS + Opentelemetry (Sampling) Samplingの種類

サンプリングは大きくHead Sampling、Tail Samplingに分けることができる。

ヘッドサンプリング

一番前からサンプリングすることを言う。代表的にはただ確率的にサンプリングすることがある。全体のトレースで10パーセントだけ残し、残りはトレースしないのだ。

Javascript
  • TraceIdRatioBasedSamplerを基本的に提供します。

欠点


尋ねて問わずDropしてしまうので、重要なtraceがドロップされる場合がある。
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 Sampling

  • 背面からサンプリングするのだ。この時は使える情報が多いので、好きなロジックに応じてフィルタリングすることができる。

たとえば、エラートレースは無条件にサンプリングする式です。

    通常、コレクタで一度すべてのトレースを受けた後にサンプリングをする。
  • 欠点
  • 実装は難しいかもしれません。システムが変わり、条件が変われば常に変えなければならない存在だ。
  • サンプリングするためにStatefulの状態を維持していなければ実行が難しい。

  • Tail Samplerがvendor-specificの場合があります。

    実装
  • Tail SamplingをCustom Span Processorを実装して実装しましょう。

    SamplingSpanProcessorの実装
  • sampling-span-processor.tsファイルの生成

  • status.codeが2(Error)またはratio確率に当選した場合にのみthis._spanProcessor.onEnd(span);を呼び出してエクスポートします。

    OtelSDKアップデート
main.tsでspanProcessorsを更新します。

以上がNestJS + Opentelemetry (サンプリング)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。