サンプリングは「作る」のか「使う」のか? 分散トレースのコストと運用を両立する実践的戦略 / Why you need the tail sampling and why you don't want it
by
ymotongpoo
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
クラウドネイティブ会議 Day 1 – May 14th, 2026 サンプリングは「作る」のか「使う」のか? 分散トレースのコストと運用を両立する実践的戦略 山口 能迪 (@ymotongpoo) Staff Developer Advocate, Grafana Labs
Slide 2
Slide 2 text
山口 能迪(やまぐちよしふみ) Staff Developer Advocate Grafana Labs 専門領域 ● オブザーバビリティ ● SRE @ymotongpoo
Slide 3
Slide 3 text
トレースはトランザクションのオブザーバビリティの中核 です。 分散システムのパフォーマンス、健全性、そして本番環 境での挙動を理解するための最善の方法です。 ⼊⾨OpenTelemetry | 3章 OpenTelemetry 概要 トレースはとても大事
Slide 4
Slide 4 text
シナリオ: 分散トレースを取得したい 分散トレースを取得する計装をした
Slide 5
Slide 5 text
最初期: ボトルネック発見 ● スロークエリが見つかった ● 不必要な直列処理を発見した ● 予期しない依存関係を見つけた
Slide 6
Slide 6 text
中期: トレース過多 ● ストレージコスト高騰 ● 分析ツールの負荷増 ● 計測時のオーバーヘッド増 ● コレクターのSPOF化
Slide 7
Slide 7 text
解決策 1: コレクタープール コレクターを複数立てて負荷分散
Slide 8
Slide 8 text
多くのデータ 良い結果 オブザーバビリティ コスト MTTR / 障害時のコスト 規模 コスト
Slide 9
Slide 9 text
解決策 2: サンプリング トレースのサンプリングの大きな分岐点 最初のスパンを受け取った瞬間に記 録有無を決定 特定のトレースのすべてのスパンを受 け取った後に記録するかを決定 ヘッドベースサンプリング テイルベースサンプリング 確率的サンプリング ● eg) 100回に1回記録 (1%) ルールベースサンプリング ● eg) ヘルスチェックの除外 ルールベースサンプリング ● eg) トレース全体のレイテンシー ● eg) スパン数の合計 ● eg) 特定のスパンの有無
Slide 10
Slide 10 text
コレクタープール × テイルサンプリングの罠 テイルを知る術がない
Slide 11
Slide 11 text
コレクタープール × テイルベースサンプリングの罠 ロードバランサーがトレース IDを見 て振り分けないとダメ
Slide 12
Slide 12 text
実際はバッチで来る A A A B1 B1 B1 ロードバランサーが見えるヘッダーは パケットの外
Slide 13
Slide 13 text
もっとバッチで来る A A A B1 B1 B1 A A A B1 B1 B1 元のパケットの情報なし
Slide 14
Slide 14 text
チャレンジ 思っているより考えることが多い OTLPでロードバランサーに送信しているときに起きていること ● エクスポーターからLBへのバッチ送信も1つのトレース ● 汎用ロードバランサーは送信トレースのヘッダーは見れる ● OTLP over gRPC は内部に複数のスパンデータを持つ 汎用L4/L7 LB だとバッチ自体のトレースしか見れない
Slide 15
Slide 15 text
loadbalancing エクスポーター & tail_sampling プロセッサー https://github.com/ymotongpoo/otel-lb-tailsampling-demo オープンソースのみの構成
Slide 16
Slide 16 text
Tier 1: Gateway loadbalancing エクスポーターの設定 exporters: loadbalancing: routing_key: "traceID" protocol: otlp: resolver: dns: hostname: otel-tier2-internal port: "4317" トレースなら "service", "traceID", "attribute" が有効
Slide 17
Slide 17 text
コレクタープール側の設定 kind: Service metadata: name: otel-tier2-internal spec: clusterIP: None # Headlessにする selector: app: otel-tier2 ports: - port: 4317 targetPort: 4317 kind: StatefulSet metadata: name: otel-tier2 spec: serviceName: otel-tier2-internal replicas: 4 selector: matchLabels: app: otel-tier2 template: metadata: labels: app: otel-tier2 Pod名を {StatefulSet名}-{通し番号} で固定 Tier 2: Sampling
Slide 18
Slide 18 text
tail_sampling プロセッサーの設定 processors: batch: tail_sampling: decision_wait: 5s num_traces: 10000 expected_new_traces_per_sec: 100 policies: - name: latency-policy type: latency latency: {threshold_ms: 100}
Slide 19
Slide 19 text
チャレンジ 思っているより考えることが多い OTLPでロードバランサーに送信しているときに起きていること ● エクスポーターからLBへの送信も1つのトレース ● 汎用ロードバランサーは送信トレースのヘッダーは見れる ● OTLP over gRPC は内部に複数のスパンデータを持つ loadbalancing エクスポーターならスパンレベルまで protobuf の中身を見てルーティングできる
Slide 20
Slide 20 text
このサンプリング機構を 本当に自分で運用したいのか
Slide 21
Slide 21 text
全トレースを Grafana Cloudに送信 トレースを評価し 価値があるものだけを保持する 価値のあるトレースのみを保持しクエ リ可能にする トレース Adaptive Traces Grafana Tempo 価値のあるトレースのみを保持 Adaptive Traces General Availability
Slide 22
Slide 22 text
インジェ スト スパン OTelによる計装 ポリシー サンプリング レコメンデーション RED 指標生成 価値あるトレース ~90% 削減 General Availability トレースデータを Adaptive Traces
Slide 23
Slide 23 text
テレメトリー削減状況の概要 推奨サンプリングポリシー
Slide 24
Slide 24 text
Actually useful AI
Slide 25
Slide 25 text
他にもAI機能があります Grafana Cloud が提供する AI アシスタント機能である Grafana Assistant のウェビナーをぜひご覧ください