ひとことで言うと#
ソフトウェアの監視(Datadog等)と同じ発想で、データパイプラインの健全性を常時モニタリングする仕組み。データの鮮度・ボリューム・スキーマ・分布・リネージの5つの柱を監視し、異常を検知したら即座にアラートを出す。
押さえておきたい用語#
- データの鮮度(Freshness)
- データが最後に更新された時刻と現在時刻の差を指す。テーブルの更新が遅延していないかを監視する基本指標。
- データボリューム(Volume)
- テーブルの行数やデータサイズの推移のこと。急激な増減はパイプラインの異常を示唆する。
- スキーマ変更(Schema Change)
- テーブルのカラム追加・削除・型変更を検知する監視項目である。予告なしの変更は下流の障害原因になる。
- データ分布(Distribution)
- カラムの値の統計的な特徴(平均・中央値・NULL率・カーディナリティ等)を継続的に計測し、異常な変動を検知する手法。
- データダウンタイム
- データが不正確・欠損・古い状態にある期間を意味する。ソフトウェアのダウンタイムのデータ版であり、これを最小化することがオブザーバビリティの目標。
データオブザーバビリティの全体像#
こんな悩みに効く#
- ダッシュボードの数値がおかしいと利用者から報告されて初めて問題に気づく
- パイプラインが止まっていたのに誰も気づかず、半日分のデータが欠損していた
- データ品質の問題がどのくらいの頻度で起きているか、そもそも把握できていない
基本の使い方#
過去3ヶ月に発生したデータ関連のインシデントを振り返り、パターンを整理する。
よくあるパターン:
- テーブルの更新が遅延している(鮮度の問題)
- 行数が急に0件になった(ボリュームの問題)
- 上流のスキーマ変更でETLが失敗した(スキーマの問題)
- 特定カラムのNULL率が急上昇した(分布の問題)
障害の発生頻度・検知までの時間・影響範囲を記録することで、どの監視から始めるべきかが見える。
以下の順序で監視を導入する(効果が出やすい順)。
- 鮮度監視(最優先)
- 各テーブルの想定更新時刻を定義(例:
daily_ordersは毎朝6:00までに更新) - 想定時刻を30分超過したらアラート
- ボリューム監視
- 過去30日の行数の平均・標準偏差を算出
- 平均から2σ以上乖離したらアラート
- スキーマ監視
- カラムの追加・削除・型変更を検知
- 変更があった場合は即座に通知
- 分布監視
- NULL率、カーディナリティ、値の範囲を継続計測
- 過去の傾向から異常な変動を検知
- リネージ連携
- 異常を検知したテーブルの下流影響範囲を自動特定
監視ルールを設定しただけでは不十分。検知から対応までのフローを設計する。
アラートの配信先:
- 緊急(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に手動で行っていた。Excelのチェックリストで確認し、異常があれば手動でログを確認・再実行。1人あたり年間480時間の深夜残業が発生していた。
全230ジョブの完了時刻とステータスを自動監視し、鮮度SLA違反はPagerDutyでオンコール担当に自動通知、ボリューム異常はSlackで翌朝のタスクとして起票、全ジョブ正常完了時は「異常なし」のサマリーを自動送信する仕組みに切り替えた。
深夜出社が完全に不要になり、担当者2名の残業時間が合計960時間/年削減。浮いた工数をデータ活用プロジェクトに充てた結果、融資審査の自動化プロジェクトが前倒しで進行した。
やりがちな失敗パターン#
- 全テーブルに同じ厳しさの監視を設定する — テーブルの重要度に応じて監視レベルを分ける。経営レポート用はP1(即時通知)、分析用は**P2(Slack通知)**のように重み付けしないとアラート疲れで形骸化する
- アラートを出すだけで対応フローがない — 通知が来ても「誰が・何をすべきか」が決まっていないと放置される。オンコールローテーションと対応手順書をセットで整備する
- 監視の精度をチューニングしない — 初期設定のまま放置すると誤検知が増え、本当の異常を見逃す。月次で誤検知率とカバレッジを振り返り、閾値を調整し続ける
まとめ#
データオブザーバビリティは、データパイプラインの鮮度・ボリューム・スキーマ・分布・リネージを常時監視し、異常を早期に検知する仕組み。ビジネス側から「数字がおかしい」と言われてから気づく運用を卒業するための第一歩。導入前後で一番変わるのは、MTTDの数値ではなく「異常に気づいた人間」が誰かという点だ。