トレーシングの進化:サンプリングから完全可視性への拡張

はじめに

現代の分散システムにおいて、可観測性(Observability)はシステムの信頼性とパフォーマンスを確保するための不可欠な要素です。トレーシング(Tracing)は、サービス間の依存関係を可視化し、異常の原因を迅速に特定するための中心的な技術です。本記事では、トレーシングの進化史から、サンプリングの課題、そして大規模なトレースデータを効率的に処理するための技術的解決策まで、トレーシングの実踐的な知識を解説します。

可観測性の進化とトレーシングの役割

1. ネットワーク監視段階

  • SNMP(Simple Network Management Protocol) を用いてハードウェアの狀態(CPU使用率、メモリなど)を監視
  • 管理者は閾値警報を設定し、ネットワークの狀態を輪替(polling)

2. サービス監視段階

  • 主機チェックとサービスチェックを導入
  • 紅緑燈のダッシュボードでサービスの狀態を可視化

3. 監視段階

  • 高度なダッシュボードと深度洞察を提供
  • 指標(Metrics)を用いてサービスの健康狀態を監視

4. 可観測性段階

  • ログ(Logs)、指標(Metrics)、トレース(Traces)を統合
  • 三支柱モデル:
    • Logs:何が起きたかを記録
    • Metrics:いつ起きたかを示す
    • Traces:どこで起きたかを追跡

5. 六支柱モデルへの拡張

  • パフォーマンスプロファイリング(Profiling)、リアルユーザー監視(Real User Monitoring)、合成テスト(Synthetic Testing)を追加
  • 端到端の可視性とアクティブな監視能力を向上

6. AI駆動の可観測性

  • AIが人間が見逃す異常を検出
  • OpenTelemetry がトレースデータの標準化を推進

トレーシングの価値とデバッグプロセス

典型的なデバッグステップ

  1. 異常警報の受信:ユーザーからのクレームや監視通知
  2. ダッシュボードでの異常サービスの特定:ピーク/下降/パターン変化を検出
  3. 特定サービスのトレースデータの分析:リクエストパスと根本原因を特定

トレーシングの核心的価値

  • 完全なリクエストパスの可視化
  • 時間系列グラフ(Duration over Time)で異常を迅速に特定
  • 紅點(エラー)と紫色點(正常)の視覚化
  • 高時長トレース(大點)と低時長トレース(小點)の直感的比較

サンプリングの課題とその影響

サンプリング率の矛盾

  • 一般的な1%サンプリング率(100個のトレースから1個を保存)
  • 結果:重要なエラートレースが失われる可能性
  • 例:10億筆の取引/日 → 10億トレース → 100萬サンプリングトレース(エラーなし)

サンプリングの根本的な問題

  • データ量の爆発
    • 毎日100億筆の取引 → 3萬億のスパン(Spans)
    • 各スパン約2KB → 累計6PBのデータ
    • ストレージ要件:毎日60臺のSSDサーバー
  • 処理オーバーヘッド
    • クラウド間の協調、データ構造管理
    • アプリケーションパフォーマンスへの影響

尾部サンプリング(Tail Sampling)の制限

  • エラー/遅延トレースを保持する必要がある
  • 現在の多くのベンダーがサポートしていないか、費用が高額
  • 技術的課題:
    • リクエスト終了までスパンを完全に収集する必要がある
    • クラウド間の協調とデータ構造管理

解決策と技術的最適化

1. 列式ストレージ(Columnar Storage)

  • 同じデータの圧縮(タイムスタンプ、文字列、數値)
  • 圧縮率を10〜20倍に向上
  • 例:
    • タイムスタンプはDelta符號化
    • 文字列は辭書符號化
    • 數値はビットパッキング

2. 確率フィルター(Probabilistic Filters)

  • Bloom Filter でトレースIDの存在性を高速に確認
  • 空間を節約し、軽量インデックスとして機能

3. パーティショニング戦略(Partitioning)

  • タイムスタンプによるパーティション:最近のデータの迅速なアクセス
  • トレースIDによるパーティション:同一トレースIDのスパンを集中保存
  • クエリ効率と並列処理能力の向上

4. 特殊ストレージ構造(Special Sharding)

  • エラーと遅延スパンを専用ストレージに分離
  • クエリ複雑度の削減:
    • トレースIDテーブル → スパンテーブル → エラースパンの直接クエリ
    • クエリ効率を50〜100倍に向上

5. レイヤードストレージアーキテクチャ(Tiered Storage)

  • ホットストレージ(0〜7日):高性能SSD
  • ウォームストレージ(8〜30日):コスト効率のHDD
  • クールストレージ(>30日):オブジェクトストレージ(S3/GCS)
  • 自動データ移行:
    • データの年齢に基づく分類
    • エラーや遅延スパンを専用ストレージに抽出

6. コスト最適化戦略

  • 1%のエラーデータに特化したストレージ
  • 専用ストレージ構造によるストレージとクエリコストの削減
  • 根本原因診斷効率とMTTR(平均修復時間)の向上

結論

トレーシングの価値

  • 最高の保真度で根本原因診斷を提供
  • 系統全體の狀態を可視化

サンプリングのリスク

  • 過度なサンプリングによる盲點とデバッグの困難
  • データ體積と診斷精度のバランスを取る必要性

技術的解決策

  • 列式ストレージ + 智能的シャーディング + 効率的なインデックス
  • ストレージコストとクエリ遅延の削減
  • 系統の可観測性とアクティブな監視能力の向上