エンジニア選書 OpenTelemetryではじめるテレメトリーサンプリング ―⁠―シグナルデータ膨張に対応しながらオブザーバビリティを確保する

「OpenTelemetryではじめるテレメトリーサンプリング」のカバー画像
著者
山口能迪やまぐちよしふみ 著
定価
4,400円(本体4,000円+税10%)
発売日
2026.8.31
判型
B5変形
頁数
448ページ
ISBN
978-4-297-15813-2

概要

オブザーバビリティの重要性が高まる一方で、導入後に直面するテレメトリーデータの爆発的増加というジレンマを抱えたチーム、組織は多いのではないでしょうか。分散トレーシング、メトリクス、ログなどの計装が充実するほどデータ量は膨張し、ストレージコストの増大、分析基盤の複雑化、重要なシグナルの埋没といった問題が顕在化します。本書は、著者が約10年にわたり現場で見てきた問題意識を背景に、サンプリングを中心とした実践的なテレメトリーデータ管理の知見をまとめた1冊です。確率的サンプリングからテイルサンプリング、動的サンプリングまで、規模に応じた戦略を整理し、さらにトレース・ログ・メトリクス・プロファイルを含む全シグナル横断のアプローチも紹介します。OpenTelemetryを用いた実装、ガバナンスやFinOpsの観点も含め、テレメトリーサンプリングを包括的に理解できる内容となっています。

目次

[第1部]サンプリングの基礎

第1章 なぜサンプリングが必要なのか

  • 1.1 オブザーバビリティとは
    • 1.1.1 オブザーバビリティの定義
    • 1.1.2 テレメトリーシグナルの4種類
    • 1.1.3 現代のシステム運用におけるオブザーバビリティの重要性
  • 1.2 オブザーバビリティのジレンマ
    • 1.2.1 オブザーバビリティのジレンマがもたらす課題
    • 1.2.2 テレメトリーシグナル別のコスト構成比
    • 1.2.3 ジレンマの解決策としてのサンプリング
    • 1.2.4 サンプリングの定義
  • 1.3 テレメトリーデータ量の増加パターン
    • 1.3.1 トラフィック量とテレメトリーデータ量の関係
    • 1.3.2 スタートアップの成長に伴うデータ量推移
    • 1.3.3 マイクロサービス数とデータ量の相関
  • 1.4 サンプリングの基準
  • 1.5 サンプリングの限界とリスク
    • 1.5.1 希少イベントの消失問題
    • 1.5.2 因果関係の断絶
    • 1.5.3 統計的バイアスの蓄積
    • 1.5.4 運用複雑性の増大
    • 1.5.5 「サンプリングしない」という選択肢
  • 1.6 サンプリング意思決定フレームワーク
    • 1.6.1 ステップ1:サンプリングが必要か
    • 1.6.2 ステップ2:どのシグナルを対象にするか
    • 1.6.3 ステップ3:どの手法を適用するか
    • 1.6.4 ステップ4:サンプリング率をいくつにするか
    • 1.6.5 サンプリング未導入のリスク事例
  • 1.7 まとめ

第2章 サンプリングの基本用語と2つの主要アプローチ

  • 2.1 用語の整理
  • 2.2 分散トレースの仕組みとサンプリング戦略の関係
    • 2.2.1 トレースはスパンの集合であり、それ自体に実体はない
    • 2.2.2 トレースIDの決定とコンテキストの伝搬
    • 2.2.3 スパンは独立にエクスポートされる
  • 2.3 ヘッドサンプリング
    • 2.3.1 確率的サンプリングの統計学的基礎
  • 2.4 テイルサンプリング
    • 2.4.1 テイルサンプリングの判定条件
  • 2.5 サンプリング率の計算と決定基準
    • 2.5.1 基本計算式
    • 2.5.2 トラフィック量に基づく推奨サンプリング率
    • 2.5.3 エラー率に基づくサンプリング率調整
    • 2.5.4 コスト制約からの逆算
    • 2.5.5 統計的精度とサンプリング率のトレードオフ
    • 2.5.6 最小サンプル数の導出方法
  • 2.6 サンプリング手法の比較
    • 2.6.1 推奨適用シーン
  • 2.7 まとめ

[第2部]実装とアーキテクチャ

第3章 OpenTelemetryでの実装とアーキテクチャ

  • 3.1 本章で使用するバージョン
  • 3.2 SDKとコレクターの役割
  • 3.3 SDKによるサンプリング実装例
    • 3.3.1 Python
    • 3.3.2 Go
    • 3.3.3 Java
    • 3.3.4 言語別サンプリング環境変数対応状況
    • 3.3.5 主要フレームワークの計装対応状況
  • 3.4 テイルサンプリングの実践的設計
    • 3.4.1 ゲートウェイ層(トラフィックの集約)
    • 3.4.2 仕分け層(load_balancingエクスポーター)
    • 3.4.3 判定層(tail_samplingプロセッサー)
  • 3.5 OpenTelemetry Collectorとは
    • 3.5.1 Collectorの内部構造
  • 3.6 サンプリング関連のCollectorコンポーネント
    • 3.6.1 tail_samplingプロセッサー
    • 3.6.2 probabilistic_samplerプロセッサー
    • 3.6.3 load_balancingエクスポーター
    • 3.6.4 span_metricsコネクター
    • 3.6.5 signal_to_metricsコネクター
    • 3.6.6 filterプロセッサー
    • 3.6.7 countコネクター
  • 3.7 サンプリング導入のアーキテクチャパターン
    • 3.7.1 パターン1:SDKのみのヘッドサンプリング
    • 3.7.2 パターン2:3層構造によるテイルサンプリング
    • 3.7.3 パターンの選択指針
  • 3.8 アーキテクチャパターン別のサンプリング課題
    • 3.8.1 イベント駆動アーキテクチャ
    • 3.8.2 サーバーレスアーキテクチャ
    • 3.8.3 バッチ処理・CronJob
    • 3.8.4 GraphQL API
    • 3.8.5 gRPCストリーミング
  • 3.9 デバッグ用サンプリングバイパス
    • 3.9.1 カスタムサンプラーによるバイパス実装
    • 3.9.2 Collector側でのバイパス設定
  • 3.10 サンプリング処理のパフォーマンスチューニング
    • 3.10.1 decision_waitとnum_tracesの設定
    • 3.10.2 メモリ見積もり方法
    • 3.10.3 スケーリング戦略
  • 3.11 まとめ

第4章 高度な戦略:動的サンプリングとアグリゲーション

  • 4.1 動的サンプリング(Adaptive Sampling)
    • 4.1.1 動的サンプリングアルゴリズムの詳細
  • 4.2 動的サンプリングのデメリット
    • 4.2.1 設定の複雑性
    • 4.2.2 統計量復元の困難さ
    • 4.2.3 コールドスタート問題
    • 4.2.4 運用コストの増大
  • 4.3 コンテキストベースサンプリング
    • 4.3.1 リクエストコンテキストベースサンプリング
    • 4.3.2 ユーザーコンテキストベースサンプリング
    • 4.3.3 ビジネスコンテキストベースサンプリング
    • 4.3.4 Baggage APIによるコンテキスト属性の伝搬
    • 4.3.5 ユースケースと実装ガイド
  • 4.4 複数段階サンプリング
    • 4.4.1 アーキテクチャと利点
    • 4.4.2 段階的フィルタリング戦略
    • 4.4.3 実装例
    • 4.4.4 パフォーマンス特性とトレードオフ
  • 4.5 統合サンプリング戦略
    • 4.5.1 手法の組み合わせ方
    • 4.5.2 戦略選択のガイドライン
    • 4.5.3 統合実装例
    • 4.5.4 段階的導入ガイド
    • 4.5.5 トラブルシューティング
  • 4.6 アグリゲーション(集約)
    • 4.6.1 生トレースを捨てる代わりにメトリクス化する
    • 4.6.2 span_metricsコネクターの設定例
  • 4.7 統計量復元の数式と計算例
    • 4.7.1 基本原理:重み付けによる復元
    • 4.7.2 具体的な計算例
    • 4.7.3 動的サンプリング環境での復元
    • 4.7.4 adjusted_countによる統計量復元の自動化
    • 4.7.5 サンプリング前後の統計量比較
  • 4.8 サンプリング環境下での4大シグナル(Four Golden Signals)の監視
    • 4.8.1 レイテンシー(Latency)
    • 4.8.2 トラフィック(Traffic)
    • 4.8.3 エラー(Errors)
    • 4.8.4 サチュレーション(Saturation)
    • 4.8.5 エグゼンプラーによるメトリクスからトレースへのナビゲーション
    • 4.8.6 サンプリングのSLOへの影響計算
    • 4.8.7 サンプリング導入前後のダッシュボード設定の違い
  • 4.9 オブザーバビリティSaaSベンダーのサンプリング機能
    • 4.9.1 AWS X-Ray Sampling Rules
    • 4.9.2 Grafana Cloud Adaptive Traces / Adaptive Metrics
    • 4.9.3 Honeycomb Refinery
    • 4.9.4 Datadogのサンプリング機能
    • 4.9.5 Dynatrace Adaptive Traffic Management
    • 4.9.6 New Relic Infinite Tracing
    • 4.9.7 Elastic APM Server Tail-based Sampling
    • 4.9.8 自前実装vs. ベンダーソリューションの判断基準
  • 4.10 テレメトリーパイプラインツールとの比較
  • 4.11 サンプリング実装の検証方法
    • 4.11.1 telemetrygenによるサンプリング検証
  • 4.12 まとめ

[第3部]シグナル別サンプリング戦略

第5章 メトリクスのダウンサンプリング

  • 5.1 メトリクスのデータ量増大の要因
    • 5.1.1 カーディナリティの爆発
    • 5.1.2 スクレイプ間隔と解像度
    • 5.1.3 リテンション期間の長期化
  • 5.2 ダウンサンプリングの定義と原理
    • 5.2.1 ダウンサンプリングとは
    • 5.2.2 トレースサンプリングとの違い
    • 5.2.3 集約関数とメトリクスタイプ
  • 5.3 ダウンサンプリングの実装パターン
    • 5.3.1 パターン1:ストレージ層でのダウンサンプリング
    • 5.3.2 パターン2:Collector パイプラインでのダウンサンプリング
    • 5.3.3 パターン3:クエリ時のダウンサンプリング
  • 5.4 カーディナリティ削減
    • 5.4.1 不要なラベルの除去
    • 5.4.2 メトリクスのフィルタリング
    • 5.4.3 PrometheusのRecording Rulesによる事前集約
  • 5.5 ダウンサンプリングの限界
    • 5.5.1 短時間スパイクの消失
    • 5.5.2 パーセンタイルの精度低下
    • 5.5.3 ストレージ容量の一時的増加
    • 5.5.4 クエリの複雑化
  • 5.6 ダウンサンプリング戦略の設計
    • 5.6.1 段階的リテンションモデル
    • 5.6.2 コスト試算
    • 5.6.3 ダウンサンプリングとアラートの関係
  • 5.7 OpenTelemetryエコシステムにおけるメトリクスダウンサンプリング
    • 5.7.1 Aggregation Temporalityとダウンサンプリング
    • 5.7.2 span_metricsコネクターとの関係
  • 5.8 トレースサンプリングとメトリクスダウンサンプリングの統合
    • 5.8.1 統合戦略の全体像
    • 5.8.2 シグナル間の整合性
  • 5.9 まとめ

第6章 ログとプロファイルのサンプリング

  • 6.1 ログサンプリングの必要性
    • 6.1.1 トレースサンプリングとの根本的な違い
    • 6.1.2 ログデータ量の増大パターン
  • 6.2 ログサンプリングの限界とリスク
    • 6.2.1 トレースとの相関の喪失
    • 6.2.2 監査ログの誤サンプリング
    • 6.2.3 ログの順序性の問題
    • 6.2.4 動的ログレベル変更の副作用
  • 6.3 アプリケーション側でのログレベル制御
    • 6.3.1 静的ログレベル設定と環境別戦略
    • 6.3.2 動的ログレベル変更
    • 6.3.3 トレース連動ログサンプリング
  • 6.4 パイプライン側でのログサンプリング
    • 6.4.1 Severityベースの重み付けサンプリング
    • 6.4.2 ログからメトリクスへの変換
    • 6.4.3 ログの構造化とサンプリング精度の関係
  • 6.5 AI/LLMワークロードのテレメトリーサンプリング
    • 6.5.1 LLMテレメトリーの特徴
    • 6.5.2 LLMテレメトリーのサンプリング戦略
    • 6.5.3 プロンプト/レスポンスのPII問題
  • 6.6 プロファイルのサンプリング
    • 6.6.1 継続的プロファイリングとサンプリングの関係
    • 6.6.2 サンプリング頻度とオーバーヘッドの定量的関係
  • 6.7 まとめ

[第4部]サンプリングの運用と実践

第7章 テレメトリーパイプラインの運用と実践

  • 7.1 テレメトリーパイプラインの活用
  • 7.2 PII除去の実装方法
    • 7.2.1 属性の削除
    • 7.2.2 正規表現を使用したマスキング
    • 7.2.3 PII検出パターン
    • 7.2.4 パイプラインへの組み込み
    • 7.2.5 PII除去のためのフレームワークとツール
  • 7.3 サンプリングパイプラインのテスト戦略
    • 7.3.1 設定ファイルの静的検証
    • 7.3.2 サンプリングポリシーの単体テスト
    • 7.3.3 カナリアデプロイによる段階的検証
    • 7.3.4 サンプリング設定のGitOps管理
  • 7.4 サンプリングパイプラインの運用
    • 7.4.1 運用上の注意点
    • 7.4.2 モニタリング項目一覧
    • 7.4.3 メトリクスの取得方法
    • 7.4.4 アラート設定の推奨ルール
  • 7.5 まとめ

第8章 サンプリングのためのテレメトリーデータ運用管理

  • 8.1 テレメトリーデータのライフサイクルとサンプリングの位置づけ
    • 8.1.1 データライフサイクルの各フェーズ
    • 8.1.2 保存フェーズにおけるサンプリングの影響
    • 8.1.3 分析フェーズにおけるサンプリングの影響
    • 8.1.4 廃棄フェーズにおけるサンプリングの影響
  • 8.2 オブザーバビリティデータ基盤の構成要素
    • 8.2.1 データ基盤の全体像
    • 8.2.2 インジェスト層
    • 8.2.3 ストレージエンジン
    • 8.2.4 クエリエンジン
    • 8.2.5 コンパクション/ダウンサンプリング層
    • 8.2.6 段階的ストレージ管理
    • 8.2.7 シグナル別バックエンドアーキテクチャの比較
  • 8.3 オブザーバビリティバックエンドとサンプリング
    • 8.3.1 バックエンドに求められる機能特性
    • 8.3.2 機能特性に基づくバックエンド比較
    • 8.3.3 バックエンド側サンプリング機能の実装パターン
    • 8.3.4 バックエンド選定の判断基準
  • 8.4 ストレージアーキテクチャとサンプリングの影響
    • 8.4.1 ストレージアーキテクチャの設計指針
    • 8.4.2 シグナル別ストレージ特性とサンプリングの関係
    • 8.4.3 サンプリング率とリテンション期間のトレードオフ
  • 8.5 サンプリング済みデータのクエリと分析
    • 8.5.1 サンプリング済みデータのクエリで発生し得る問題
    • 8.5.2 adjusted_countを用いた統計量復元のクエリ例
    • 8.5.3 エグゼンプラーを活用したメトリクス→トレースのドリルダウン
  • 8.6 サンプリングとオブザーバビリティの品質指標
    • 8.6.1 品質評価の3つの観点
    • 8.6.2 実運用での品質モニタリング指標
    • 8.6.3 品質モニタリングのPromQLクエリ例
    • 8.6.4 ダッシュボード設計の指針
    • 8.6.5 品質低下時の対処フロー
  • 8.7 重要度ベースのデータ分類とサンプリング率の差別化
    • 8.7.1 重要度分類の枠組み
    • 8.7.2 重要度分類の判断基準
    • 8.7.3 データルーティングの設計パターン
    • 8.7.4 重要度分類の実装における注意点
  • 8.8 まとめ

第9章 サンプリングのガバナンスとコンプライアンス

  • 9.1 データの機密性とサンプリングの順序設計
    • 9.1.1 PII除去とサンプリングの前後関係
    • 9.1.2 コンプライアンス要件別のパイプライン設計
    • 9.1.3 サンプリング除外リスト(ホワイトリスト)の設計
  • 9.2 マルチテナント環境でのサンプリング公平性
    • 9.2.1 ノイジーネイバー問題とテレメトリーデータ
    • 9.2.2 テナントごとのサンプリング率制御
    • 9.2.3 クォータ管理とレートリミッティング
  • 9.3 サンプリングの組織的課題
    • 9.3.1 チーム間のサンプリング率の不整合
    • 9.3.2 サンプリングポリシーのオーナーシップ
    • 9.3.3 データレジデンシーとサンプリング
  • 9.4 まとめ

第10章 テレメトリーFinOpsとサンプリングポリシーのライフサイクル

  • 10.1 テレメトリーコストの可視化と帰属
    • 10.1.1 コスト帰属(Cost Attribution)の仕組み
    • 10.1.2 コスト可視化ダッシュボードの構築
    • 10.1.3 経営層向けROI説明の構成
  • 10.2 サンプリングポリシーの継続的見直し
    • 10.2.1 見直しトリガーの定義
    • 10.2.2 定期レビューサイクルの確立
    • 10.2.3 OpAMPによるサンプリング設定のリモート管理
  • 10.3 「データが消える」不安への対処
    • 10.3.1 開発者の懸念に対する論理的回答
    • 10.3.2 デバッグ用サンプリングバイパスの3レベル設計
    • 10.3.3 サンプリング導入の社内コミュニケーション
  • 10.4 サンプリング成熟度モデル
    • 10.4.1 各レベルの詳細
  • 10.5 まとめ

第11章 サンプリングの事例

  • 11.1 Uber:適応型サンプリングによる大規模トレース管理(2019年)
    • 11.1.1 背景と課題
    • 11.1.2 採用したサンプリング戦略
    • 11.1.3 導入効果
    • 11.1.4 導入時の課題と解決方法
  • 11.2 Slack:因果グラフモデルによるトレーシングとサンプリング(2020年)
    • 11.2.1 背景と課題
    • 11.2.2 採用したサンプリング戦略
    • 11.2.3 導入効果
    • 11.2.4 導入時の課題と解決方法
  • 11.3 Canva:OpenTelemetryによるエンドツーエンドトレーシングの構築(2021年)
    • 11.3.1 背景と課題
    • 11.3.2 採用したサンプリング戦略
    • 11.3.3 導入効果
    • 11.3.4 導入時の課題と解決方法
  • 11.4 DoorDash: OpenTelemetry のスパンプロセッサー最適化(2021年)
    • 11.4.1 背景と課題
    • 11.4.2 採用した最適化戦略
    • 11.4.3 導入効果
    • 11.4.4 導入時の課題と解決方法
  • 11.5 Intercom: Honeycomb Refinery による動的サンプリングの導入(2022年)
    • 11.5.1 背景と課題
    • 11.5.2 採用したサンプリング戦略
    • 11.5.3 導入効果
    • 11.5.4 導入時の課題と解決方法
  • 11.6 Skyscanner:OpenTelemetryによるテレメトリーコスト90%削減(2025年)
    • 11.6.1 背景と課題
    • 11.6.2 採用したサンプリング戦略
    • 11.6.3 導入効果
    • 11.6.4 導入時の課題と解決方法
  • 11.7 AuditBoard:マネージドテイルサンプリングによるトレースコスト最適化(2025年)
    • 11.7.1 背景と課題
    • 11.7.2 採用したサンプリング戦略
    • 11.7.3 導入効果
    • 11.7.4 導入時の課題と解決方法
  • 11.8 Cloudflare:大規模Prometheusにおけるカーディナリティ管理(2023年)
    • 11.8.1 背景と課題
    • 11.8.2 採用したカーディナリティ管理戦略
    • 11.8.3 導入効果
    • 11.8.4 導入時の課題と解決方法
  • 11.9 Stripe: Amazon Managed Service for Prometheusへの大規模メトリクス移行(2024年)
    • 11.9.1 背景と課題
    • 11.9.2 採用した移行・最適化戦略
    • 11.9.3 導入効果
    • 11.9.4 導入時の課題と解決方法
  • 11.10 ログサンプリングとコスト最適化の事例
    • 11.10.1 Expanso:ログパイプライン最適化によるSplunkコスト削減
    • 11.10.2 業界動向:オブザーバビリティコストの構造的課題
  • 11.11 プロファイルのサンプリングの事例
    • 11.11.1 Grafana Labs:プロファイリングのオーバーヘッド実測(2026年)
    • 11.11.2 Pixie:eBPFプロファイラーの最適化(2021年)
  • 11.12 サンプリング導入の失敗パターン
    • 11.12.1 失敗パターン1:ConfigMap 更新時の設定ミスによるデータ消失
    • 11.12.2 失敗パターン2:テイルサンプリングのOOMによるデータロスト
    • 11.12.3 失敗パターン3:span_metrics配置ミスによるメトリクス不整合
  • 11.13 サンプリングのアンチパターン集
  • 11.14 事例の横断的分析
    • 11.14.1 事例から得られる教訓
  • 11.15 まとめ

付録A サンプリング導入のチェックリスト

  • A.1 サンプリング導入の判断フロー
  • A.2 推奨されるリテンションとストレージ設計
  • A.3 サンプリング率の推奨値
    • A.3.1 システム規模別の推奨サンプリング率
    • A.3.2 トラフィック量に基づく推奨サンプリング率
    • A.3.3 エンドポイント種別ごとの推奨サンプリング率
    • A.3.4 環境別の推奨サンプリング率
    • A.3.5 最小サンプル数の早見表
  • A.4 移行計画テンプレート
    • A.4.1 フェーズ1:準備(推奨期間:1〜2週間)
    • A.4.2 フェーズ2:テスト(推奨期間:1〜2週間)
    • A.4.3 フェーズ3:段階的展開(推奨期間:2〜4週間)
    • A.4.4 フェーズ4:完全移行(推奨期間:1〜2週間)

付録B トラブルシューティングガイド

  • B.1 問題1:Collectorのメモリ枯渇(OOMKill)
  • B.2 問題2:スパンがバックエンドに届かない
  • B.3 問題3:サンプリング率が意図した値と異なる
  • B.4 問題4:分散トレースが不完全(スパンの欠落)
  • B.5 問題5:テイルサンプリングのレイテンシーが大きい
  • B.6 問題6:エラートレースがサンプリングで除外される
  • B.7 問題7:load_balancing エクスポーターでトレースが分散してしまう
  • B.8 問題8:span_metricsコネクターのメトリクスが不正確
  • B.9 問題9:サンプリング設定の変更が反映されない
  • B.10 問題10:SDKのサンプリング設定が環境変数で上書きされる
  • B.11 問題11:probabilistic_sampler・tail_samplingプロセッサーの競合
  • B.12 問題12:ログのSeverityフィルタリングが意図どおりに動作しない
  • B.13 問題13:トレース連動ログサンプリングでログが全量破棄される

付録C サンプリングの将来展望

  • C.1 Consistent Probability Samplingの標準化
    • C.1.1 背景:TraceIdRatioBasedサンプラーの課題
    • C.1.2 W3C Trace Context Level 2との連携
    • C.1.3 仕組みの詳細
    • C.1.4 一貫性の保証
    • C.1.5 標準化の現状
  • C.2 signal_to_metrics コネクターによるシグナル横断的なメトリクス生成
    • C.2.1 span_metrics コネクターの限界とsignal_to_metricsの登場
  • C.3 エッジコンピューティング・IoTでのサンプリング
    • C.3.1 エッジ環境固有の制約
    • C.3.2 エッジ向けサンプリング戦略
    • C.3.3 軽量Collectorの動向
  • C.4 AIを活用したインテリジェントサンプリング
    • C.4.1 ルールベースサンプリングの限界
    • C.4.2 Grafana Adaptive Tracesの先行事例
    • C.4.3 フィードバックループ問題
    • C.4.4 今後の展望

付録D 統合設定例

  • D.1 コンテキストベースサンプリング統合設定
  • D.2 統合サンプリング戦略の設定
    • D.2.1 SDK側の設定(第1段階)
    • D.2.2 Collector側の設定(第2段階)

プロフィール

山口能迪やまぐちよしふみ

Grafana Labs所属のスタッフデベロッパーアドボケイト。 OpenTelemetryやGoのコミュニティの支援も活発に行っている。 『入門OpenTelemetry』『SREをはじめよう』『効率的なGo』『SLOサービスレベル目標』『オブザーバビリティ・エンジニアリング』(オライリー・ジャパン)、『実践プロパティベーステスト』(ラムダノート)翻訳、『SREの探求』(オライリー・ジャパン)監訳をはじめ、技術書の翻訳に多数関わる。

X@ymotongpoo