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 のウェビナーをぜひご覧ください