LESSON 30分

ストーリー

田中VPoE
SREの世界ではオブザーバビリティ(可観測性)が重要だ。メトリクス、ログ、トレースの3本柱で、システムの状態を把握し障害を早期検知する
あなた
データパイプラインにも同じ考え方が適用できるんですか?
田中VPoE
まさにそうだ。データオブザーバビリティは、「データのダウンタイム」を検知し最小化するための仕組みだ。パイプラインが正常に動いていても、データが壊れている可能性がある。これを「サイレントデータ障害」と呼ぶ
あなた
パイプラインのジョブは成功しているのに、データの中身がおかしいケースですね
田中VPoE
例えば、ソースシステムの仕様変更で日付フォーマットが変わり、NULLに変換されてしまうケース。dbtジョブは成功するが、データの品質は壊れている。これをプロアクティブに検知するのがデータオブザーバビリティだ

データオブザーバビリティの5本柱

監視すべき5つの領域

監視対象異常の例検知方法
鮮度(Freshness)データの最終更新時刻テーブルが6時間更新されていないタイムスタンプ監視
ボリューム(Volume)テーブルのレコード数日次で通常1万件が100件に激減統計的異常検知
スキーマ(Schema)テーブル構造の変更カラムが追加/削除されたスキーマスナップショット比較
分布(Distribution)カラム値の統計的分布NULL率が突然30%に上昇分布モニタリング
リネージ(Lineage)データの依存関係上流テーブルの障害による下流への影響依存関係の追跡
データオブザーバビリティの全体像:

┌──────────────────────────────────────────────┐
│         データオブザーバビリティ                   │
│                                              │
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌────┐│
│  │ 鮮度  │ │ 量   │ │スキーマ│ │ 分布  │ │系譜 ││
│  │      │ │      │ │      │ │      │ │    ││
│  │ 最終  │ │レコード│ │ 構造  │ │ NULL │ │依存 ││
│  │ 更新  │ │ 数   │ │ 変更  │ │ 率   │ │関係 ││
│  └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └─┬──┘│
│     │        │        │        │        │    │
│     └────────┴────────┴────────┴────────┘    │
│                      │                       │
│              ┌───────┴────────┐              │
│              │  異常検知エンジン  │              │
│              │  (ML + ルール)   │              │
│              └───────┬────────┘              │
│                      │                       │
│              ┌───────┴────────┐              │
│              │ アラート + 対応  │              │
│              │ Slack/PagerDuty │              │
│              └────────────────┘              │
└──────────────────────────────────────────────┘

データオブザーバビリティツール

主要ツール比較

ツールライセンス特徴異常検知
Monte Carlo商用フルマネージド、ML異常検知自動(ML)
ElementaryOSSdbtネイティブルールベース + 統計
SodaOSS / 商用SodaCL言語、マルチプラットフォームルールベース
Great ExpectationsOSSPython、テスト特化ルールベース
re_dataOSSdbt統合統計的異常検知

Elementary(dbtネイティブ)の例

# dbt_project.yml
# Elementary パッケージで異常検知テストを定義

models:
  - name: slv_orders
    columns:
      - name: total_amount
        tests:
          - elementary.column_anomalies:
              # 過去30日間の統計から異常を検知
              timestamp_column: order_date
              where: "order_date >= CURRENT_DATE - 30"
              anomaly_sensitivity: 3  # 3σ以上で異常
      - name: order_id
        tests:
          - elementary.volume_anomalies:
              # レコード数の異常を検知
              timestamp_column: order_date
              anomaly_sensitivity: 3

アラート設計

アラートの分類

重要度条件通知先対応時間
Critical主要テーブルの鮮度が2時間超過PagerDuty + Slack #data-incidents30分以内
Highレコード数が期待値の50%以下Slack #data-alerts2時間以内
MediumNULL率が閾値を超過Slack #data-quality翌営業日
Lowスキーマ変更の検知Slack #data-changes確認のみ

アラート疲れの防止

対策方法
重要テーブルに限定Gold層 + 経営ダッシュボード関連のみCritical
集約通知同じ問題のアラートは1つにまとめる
自動解決一時的な異常は一定時間後に自動クローズ
チューニング誤検知が多いアラートの閾値を調整
オンコールローテーション対応者を交代制にして負荷分散

データインシデント管理

インシデント対応フロー

データインシデント対応フロー:

1. 検知 (MTTD: Mean Time to Detect)
   └── アラート受信 → インシデント起票

2. 影響分析 (MTTI: Mean Time to Identify)
   ├── リネージで影響範囲を特定
   ├── 影響を受けるダッシュボード/レポートを特定
   └── ステークホルダーに影響を通知

3. 根本原因分析
   ├── リネージで上流をたどる
   ├── 品質チェックログを確認
   └── ソースシステムの変更を確認

4. 修復 (MTTR: Mean Time to Resolve)
   ├── データの修正(再処理/パッチ)
   ├── パイプラインの修正
   └── 品質チェックの追加

5. 振り返り
   └── ポストモーテム → 再発防止策

データSLAの定義

SLA定義目標値
MTTD検知までの平均時間30分以内
MTTR復旧までの平均時間4時間以内
データ鮮度SLAGold層の更新遅延2時間以内
品質スコアSLA品質スコアの下限95点以上
可用性SLAパイプラインの稼働率99.5%

「データオブザーバビリティは、SREのオブザーバビリティをデータに適用したものだ。サイレントデータ障害を検知できる仕組みがなければ、誤ったデータで意思決定するリスクを常に抱えることになる」 — 田中VPoE


まとめ

ポイント内容
5本柱鮮度、ボリューム、スキーマ、分布、リネージ
ツールMonte Carlo(商用)、Elementary(OSS/dbt)、Soda(OSS)
アラート設計重要度に応じた通知先と対応時間の定義、アラート疲れの防止
インシデント管理検知→影響分析→根本原因分析→修復→振り返りのフロー

チェックリスト

  • データオブザーバビリティの5本柱を説明できる
  • 主要ツールの特徴を比較できる
  • アラート設計と誤検知対策を理解した
  • データインシデント管理フローとSLAを定義できる

次のステップへ

次は「演習:データガバナンス基盤を設計しよう」です。Step 4で学んだデータ品質、リネージ、カタログ、オブザーバビリティを統合したガバナンス基盤を設計します。


推定読了時間: 30分