ひとことで言うと#
ソフトウェアの監視(Datadog等)と同じ発想で、データパイプラインの健全性を常時モニタリングする仕組み。データの鮮度・ボリューム・スキーマ・分布・リネージの5つの柱を監視し、異常を検知したら即座にアラートを出す。
押さえておきたい用語#
- データの鮮度(Freshness)
- データが最後に更新された時刻と現在時刻の差を指す。テーブルの更新が遅延していないかを監視する基本指標。
- データボリューム(Volume)
- テーブルの行数やデータサイズの推移のこと。急激な増減はパイプラインの異常を示唆する。
- スキーマ変更(Schema Change)
- テーブルのカラム追加・削除・型変更を検知する監視項目である。予告なしの変更は下流の障害原因になる。
- データ分布(Distribution)
- カラムの値の統計的な特徴(平均・中央値・NULL率・カーディナリティ等)を継続的に計測し、異常な変動を検知する手法。
- データダウンタイム
- データが不正確・欠損・古い状態にある期間を意味する。ソフトウェアのダウンタイムのデータ版であり、これを最小化することがオブザーバビリティの目標。
データオブザーバビリティの全体像#
こんな悩みに効く#
- ダッシュボードの数値がおかしいと利用者から報告されて初めて問題に気づく
- パイプラインが止まっていたのに誰も気づかず、半日分のデータが欠損していた
- データ品質の問題がどのくらいの頻度で起きているか、そもそも把握できていない
基本の使い方#
過去3ヶ月に発生したデータ関連のインシデントを振り返り、パターンを整理する。
よくあるパターン:
- テーブルの更新が遅延している(鮮度の問題)
- 行数が急に0件になった(ボリュームの問題)
- 上流のスキーマ変更でETLが失敗した(スキーマの問題)
- 特定カラムのNULL率が急上昇した(分布の問題)
障害の発生頻度・検知までの時間・影響範囲を記録することで、どの監視から始めるべきかが見える。
以下の順序で監視を導入する(効果が出やすい順)。
1. 鮮度監視(最優先):
- 各テーブルの想定更新時刻を定義(例:
daily_ordersは毎朝6:00までに更新) - 想定時刻を30分超過したらアラート
2. ボリューム監視:
- 過去30日の行数の平均・標準偏差を算出
- 平均から2σ以上乖離したらアラート
3. スキーマ監視:
- カラムの追加・削除・型変更を検知
- 変更があった場合は即座に通知
4. 分布監視:
- NULL率、カーディナリティ、値の範囲を継続計測
- 過去の傾向から異常な変動を検知
5. リネージ連携:
- 異常を検知したテーブルの下流影響範囲を自動特定
監視ルールを設定しただけでは不十分。検知から対応までのフローを設計する。
アラートの配信先:
- 緊急(P1): PagerDutyでオンコール担当に即時通知(経営レポートに影響するテーブル)
- 重要(P2): Slackの専用チャンネルに通知(分析チーム向けテーブル)
- 情報(P3): 日次サマリーレポートに記載(軽微な変動)
対応フロー:
- アラート受信 → 影響範囲を確認(リネージで特定)
- 原因を調査(上流のジョブログ・スキーマ変更履歴を確認)
- 修正 or エスカレーション
- ポストモーテムを記録し再発防止策を実施
運用開始後、アラートの精度をチューニングする。
- 誤検知(False Positive)が多い: 閾値が厳しすぎる → 緩和する or 時間帯で条件を変える
- 見逃し(False Negative)がある: 監視対象のテーブルが漏れている → カバレッジを拡大
- アラート疲れ: 重要度の分類を見直し、P3は日次サマリーにまとめる
月次で**アラート件数・誤検知率・平均検知時間(MTTD)・平均復旧時間(MTTR)**を計測し、改善する。
具体例#
状況: 月間GMV50億円のECプラットフォーム。データ基盤チーム8名が400テーブルを管理。ダッシュボードの数値異常をビジネス側から指摘されてから対応する「受け身の運用」が常態化していた。
導入前の実態:
- 月平均のデータインシデント: 12件
- 平均検知時間(MTTD): 4.5時間(ビジネス側が気づくまでの時間)
- 平均復旧時間(MTTR): 3時間
- 月間データダウンタイム: 約18時間
オブザーバビリティ導入後:
- 鮮度監視: 主要50テーブルに更新SLAを設定
- ボリューム監視: 全テーブルに2σルールを適用
- スキーマ監視: 変更検知 → Slack自動通知
3ヶ月後の結果: MTTD 4.5時間 → 15分、MTTR 3時間 → 45分。月間データダウンタイムは18時間 → 2時間に削減。ビジネス側からの「数字がおかしい」という問い合わせが月20件 → 3件に減った。
状況: 従業員3,000名の医療情報システム会社。全国150病院の電子カルテデータを集約し、臨床研究向けのデータ基盤を運用している。
ある日、分布監視が「患者の血液型カラムのNULL率が**2% → 35%**に急上昇」とアラートを発報。
即座の対応:
- リネージを辿り、影響を受ける下流の分析テーブル8個を特定
- 上流を調査 → 特定病院のカルテシステムがバージョンアップ時にマッピングエラーを起こしていたことが判明
- 該当病院のシステム部門に連絡、4時間で修正パッチを適用
- 欠損期間のデータを再取得し、分析テーブルを再構築
オブザーバビリティがなければ、次回の四半期レポート作成時(2ヶ月後)まで気づかなかった可能性がある。臨床研究の信頼性に関わる問題を、発生当日に解決できた。
状況: 総資産2兆円の地方銀行。毎晩の日次バッチ処理(230ジョブ)の完了確認を、運用担当者2名が深夜3:00に手動で行っていた。
導入前の運用:
- 深夜3:00に出社し、ジョブの完了状態をExcelのチェックリストで確認
- 異常があれば手動でログを確認し、再実行 or エスカレーション
- 担当者の年間残業時間: 1人あたり480時間(深夜勤務分)
オブザーバビリティで自動化した内容:
- 全230ジョブの完了時刻・ステータスを自動監視
- 鮮度SLA違反 → PagerDutyでオンコール担当に自動通知
- ボリューム異常 → Slackで翌朝の確認タスクとして起票
- 全ジョブ正常完了時は「異常なし」のサマリーを自動送信
深夜出社が完全に不要になり、担当者2名の残業時間が合計960時間/年削減。浮いた工数をデータ活用プロジェクトに充てた結果、融資審査の自動化プロジェクトが前倒しで進行した。
やりがちな失敗パターン#
- 全テーブルに同じ厳しさの監視を設定する — テーブルの重要度に応じて監視レベルを分ける。経営レポート用はP1(即時通知)、分析用は**P2(Slack通知)**のように重み付けしないとアラート疲れで形骸化する
- アラートを出すだけで対応フローがない — 通知が来ても「誰が・何をすべきか」が決まっていないと放置される。オンコールローテーションと対応手順書をセットで整備する
- 監視の精度をチューニングしない — 初期設定のまま放置すると誤検知が増え、本当の異常を見逃す。月次で誤検知率とカバレッジを振り返り、閾値を調整し続ける
まとめ#
データオブザーバビリティは、データパイプラインの鮮度・ボリューム・スキーマ・分布・リネージを常時監視し、異常を早期に検知する仕組み。ビジネス側から「数字がおかしい」と指摘される前に、データチームが自ら問題を発見・対応できる体制を作る。まずは主要テーブルの鮮度監視から始め、段階的に監視の柱を追加していくのが導入の定石になる。