デフォルトのサンプリング設定はすべてのサービスで機能しますが、最適ではない可能性があります。 APMエージェントはサンプリング設定オプションを提供するため、サービスのニーズに合わせてサンプリングをカスタマイズできます。 このページでは、さまざまな種類のサービスの実際の例と、それらのニーズに合わせてサンプリング設定を変更する方法について説明します。
このページの設定例では、YAML形式を使用しています(Javaエージェント)。お使いの言語での同等の構文および完全なパラメーターリファレンスについては、エージェントのドキュメントを参照してください:
- Javaエージェントのディストリビューティッド(分散)トレーシング設定
- Node.jsエージェントのディストリビューティッド(分散)トレーシングの設定
- Pythonエージェントのディストリビューティッド(分散)トレーシングの設定
前提条件
このガイドでは、サンプラーのコンテキストとタイプに精通していることを前提としています。サンプラーの概念の全体像については、「サンプリングの設定」ページをご覧ください。
例1:まれにしか呼び出されないエンドポイントによる、キャプチャされたエンドポイントの不適切な分布
デフォルトのサンプラーであるAdaptiveサンプラーは、ほとんどのAPM言語エージェントで1分間に約10のトレースをサンプリングします。Adaptiveサンプラーはトレースをランダムに選択するため、呼び出し頻度の低いエンドポイントよりも、呼び出し頻度の高いエンドポイントをサンプリングする可能性が高くなります。
解決策:Adaptiveサンプリングのターゲットを増やす
adaptive_sampling_targetを増やすと、毎分より多くのトレースがサンプリングされ、頻度の低いエンドポイントのトレースをキャプチャする可能性が高まります。
distributed_tracing: sampler: adaptive_sampling_target: 20 # Increase from default 10 to 20例2:アップストリームのサンプリングによりキャプチャされたエンドポイントの分布が不十分な場合
デフォルトのAdaptiveサンプラーを使用すると、現在のサービスは、アップストリームサービスがすでにサンプリングした受信トレースもサンプリングします。場合によっては、これにより、アップストリームの親を持つエンドポイントからのトレースが多すぎ、他のエンドポイントからのトレースが少なすぎる結果になることがあります。
解決策:アップストリームサービスによってサンプリングされたトレースのサンプリングレートを下げます。
Trace Id Ratio Based Samplerは、アップストリームでサンプリングされたトレースを10%の確率でのみサンプリングするために使用できます。これにより、アップストリームサービスによってサンプリングされたトレースでスパンリザーバーがいっぱいになる可能性が低くなります。
distributed_tracing: sampler: remote_parent_sampled: trace_id_ratio_based: ratio: 0.1例3:すべてのコンテキストでトレースの分布を変更する
例2 — アップストリームでサンプリングされたトレースが多すぎる — は、より一般的な問題の特定のケースです:すべてのトレースコンテキストで表示されるトレースの分布に対して、より詳細な制御が求められる。
解決策:複数のレシオサンプラーを階層化する
複数のトレース比率サンプラーを階層化することで、前の例を発展させることができます。各トレースコンテキストのサンプリングレートは独立しているため、目的とするトレースの分布を実現するように各比率を調整できます。
この例では、すべてのトレースコンテキストが比率ベースのサンプリングを使用します。比率は、(固定数ではなく)rootのトレースのうち25%、(すべてではなく)アップストリームサービスによってサンプリングされたトレースの50%、および(まったくサンプリングしないのではなく)アップストリームサービスによってサンプリングされていないトレースの5%をサンプリングするように設定されています。
distributed_tracing: sampler: root: trace_id_ratio_based: ratio: 0.25 remote_parent_sampled: trace_id_ratio_based: ratio: 0.5 remote_parent_not_sampled: trace_id_ratio_based: ratio: 0.05