取り込みサンプリングを利用するには、サンプラーを含むバージョンの Weave サーバーが必要です。
@weave.op Call のサンプリングには、Weave Python SDK 0.53.0 以降、または Weave TypeScript SDK 0.16.0 以降も必要です。エージェント スパンには SDK 要件はありません。詳細は、要件と制限事項 を参照してください。@weave.op デコレーターの tracing_sample_rate パラメーターでは、個々のトレース対象関数が自身の Call をサンプリングできますが、デプロイメント全体に適用されるのはサーバー側のサンプリング率のみであり、個々のクライアントがそれを変更したり無視したりすることはできません。詳細は、サンプリング率を制御する を参照してください。
取り込みサンプリングを使用する理由
0 から 1 までの数値を設定して指定します。
1.0はすべてのトレースを保持し、サンプリングは無効です (デフォルト) 。0.1はトレースの 10% を保持し、残りを破棄します。0.0は、評価を除くすべてのトレースを破棄します。
取り込みサンプリングの適用対象
@weave.opデコレータからの Call。これらは Traces タブに表示されます。- エージェント トレース endpoint (
/agents/otel/v1/traces) に送信されるエージェント スパン。これらは Agents タブに表示されます。詳細は、エージェントをトレースするを参照してください。
- Weave SDK からの評価。Weave は、これらが意図的な品質測定であり、部分的なデータで計算するとスコアが不正確になるため、保持します。
- 生の OTel endpoint (
/otel/v1/traces) に独自の OpenTelemetry ツールを使用して送信されたトレース。生の OpenTelemetry トラフィックには評価マーカーがないため、これをサンプリングすると評価が気付かないうちに除外される可能性があります。詳細は、OpenTelemetry トレースを Weave に送信するを参照してください。 - サポートされるバージョンより前の Weave SDK バージョンからの Call。要件と制限事項を参照してください。
仕組み
trace_id を持つ複数の Call が含まれている場合、トレースを保持するか破棄するかというサーバーの判定は、同じトレース ID を共有するネストされた Call やスパンにも及びます。トレースは全体が保持されるか、全体が破棄されるかのいずれかであり、途中まで保存されることはありません。
取り込みサンプリングを設定する
WEAVE_INGEST_SAMPLE_RATE には、保持したいトレースの割合を設定します。たとえば 0.1 です。
任意: ドライランでプレビューする
WEAVE_INGEST_SAMPLE_RATE=0.1 と WEAVE_INGEST_SAMPLE_DRY_RUN=true を設定して、代表的なピーク トラフィックを含む期間 (たとえば丸 1 日) 実行してください。これにより、サーバーがどれだけのトラフィックをドロップするか、またどれだけのトラフィックがサンプリング対象外かを確認できます。続いて、WEAVE_INGEST_SAMPLE_DRY_RUN=false を設定して、トレースのドロップを開始します。
Call とエージェント スパンでは別々のカウンターが報告され、両者は異なるものをカウントしているため、合算しないでください。各カウンターには、endpoint を識別する route タグが付きます。Call カウンターは Call レコードを、エージェント カウンターはトレース全体ではなくスパンをカウントするため、各セット内の比率はトレース数ではなくメッセージ量を反映します。
以下のカウンターは Call を対象としています。
以下のカウンターはエージェント スパンを対象としています。
要件と制限事項
- SDK バージョン要件: サーバーがサンプリングするのは、Weave Python SDK 0.53.0 以降、または Weave TypeScript SDK 0.16.0 以降からの Call のみです。これらのバージョンでは、サーバーが trace のメッセージをグループ化し、評価 Call を認識するために使用するシグナルが追加されています。古い SDK からの Call はサンプリングされず、拒否もされないため、アプリをアップグレードするまでは、設定したレートはそれらのトラフィックに影響しません。エージェント スパンは OpenTelemetry プロトコルの一部として trace ID を持つため、そのサンプリングに SDK バージョン要件はありません。
- サーバー バージョン: エージェント スパンのサポートは、Call のサポートより後に追加されました。すでに
1.0未満のレートを設定している場合は、エージェント スパンをサンプリングするサーバー バージョンにアップグレードすると、同じレートでエージェント トラフィックのサンプリングも開始されます。 - 削減効果はクライアント構成に依存します: 古い SDK や raw OpenTelemetry からのトラフィックなど、サンプリングされないトラフィックではコストは削減されません。トラフィックの多くがそれらのソースから来ている場合、削減効果はレートから想定されるほど大きくありません。まずこれを測定するには、ドライランが最適です。
- モニターとスコアリング: ドロップされた trace は保存もスコアリングもされません。トラフィックの 100% をカバーするモニターに依存している場合は、サンプリングを有効にする前にこの点を考慮してください。
- クライアントへのドロップ通知なし: ドロップされた trace には通常どおり成功レスポンスが返されます。クライアントには、自身の trace がドロップされたことは通知されません。