ふくふくHukuhuku Inc.
EP.04Foundation 12分公開: 2026-05-10

「夜中に止まるパイプライン」を撲滅する監視設計

アラート粒度・Runbook・SLO設計。夜中の障害対応を「人間がいなくても回る」状態に持っていくための設計図。

#監視#SLO#Runbook#Datadog
シェア

データパイプラインは、運用に乗ると必ず夜中に止まります。私たちが5年継続している案件でも、月に1〜2回は何かしらの障害が起きています。重要なのは「障害をゼロにする」ではなく「夜中に人間が起きなくても自動で復旧する、もしくは朝の業務開始までに対処できる」状態を作ることです。

監視設計の3階層

レベル1:自動回復リトライ・タイムアウト延長で勝手に直る→ 通知だけ(Slack #data-info)、誰も起きないレベル2:朝対応SLA違反だがビジネス影響は朝まで待てる→ 翌朝の朝会で対応(Slack #data-warn)レベル3:即時対応本番のBI/外部API停止 = 事業影響あり→ PagerDuty で起こす(夜中でも対応)
監視の3階層と対応者

重要なのは、すべてのアラートを「即時対応」にしないことです。私たちが入る前は「全部で SEV1 扱い、毎晩誰かが起きる」状態のチームをよく見ます。3階層に分けるだけで、夜中の起床は1/10以下になります。

(Service Level Objective)の決め方

「うちのデータパイプラインの SLO は何ですか?」と聞かれて即答できる組織は、ほぼありません。SLOは具体的な数字で書きます。

対象SLISLO違反時の対応レベル
日次バッチ完了時刻毎日朝7時までに完了L2(朝対応)
ダッシュボード可用性99.5% / 月L3(即時)
データ鮮度最新データの遅延30分以内L2
スキーマテスト失敗率0% / リリース時L2(PR出し直し)

Runbook:障害対応を「読めば分かる」状態に

Runbook(障害対応手順書)は、書いているチームが少ないです。「何かあったら詳しい人を呼ぶ」運用は、その人が休みのとき詰みます。Runbook の最低構成は3項目です:症状・原因候補・対処手順。

Runbook テンプレート
Markdown
# [Pipeline名] 障害対応 Runbook
## 症状- アラート文言: `...`- 影響範囲: 〇〇のBIダッシュボード、〇〇への配信
## 原因候補(過去発生順)1. **ソースAPIのレート制限**(70%)   - 確認: `curl -I https://api.../usage` で残量チェック   - 対処: 翌時間まで待つ、もしくは緊急増枠2. **{{snowflake|*}} 容量上限**(20%)   - 確認: ウェアハウス使用量   - 対処: 一時的にサイズ拡大3. **{{dbt|*}} スキーマテスト失敗**(10%)   - 確認: dbt artifact / Slack ログ   - 対処: 該当モデルを除外して継続、原因はチケット化
## エスカレーション- 30分対処できない → 〇〇さん(Slack DM)- 朝までに復旧見込み無し → 〇〇さん(電話)

に Runbook を量産させる

Runbook は数が多いほど価値が出ますが、書くのが面倒で続きません。Claude Code に過去の障害ログから雛形を作らせると、運用ノウハウの蓄積が一気に進みます。

プロンプト例(Claude Code)
以下は過去6ヶ月の障害インシデントログです。
パイプライン別に Runbook を生成してください。

## 出力フォーマット
- 各パイプラインに対して、症状 / 原因候補(発生頻度順)/ 対処手順 / エスカレーション先
- 過去ログから「再発するパターン」を見つけて頻度%付きで列挙
- 対処手順はコマンドレベルで具体的に

## 入力
@incidents/2025-12.csv
@incidents/2026-01.csv
@incidents/2026-02.csv
...
想定される実行結果(例示)
## 生成された Runbook 一覧

### 1. `pipeline_sales_daily` Runbook
- 6ヶ月で 12回 障害発生
- 主原因: Salesforce {{api|*}} レート制限(67%)/ Snowflake 容量(25%)/ その他(8%)
- 対処手順を3パターン分、コマンドレベルで生成 → `runbooks/sales_daily.md`

### 2. `pipeline_finance_monthly` Runbook
- 6ヶ月で 4回 障害発生
- 主原因: 月初負荷集中(75%)/ ストレージ上限(25%)
- 対処手順を生成 → `runbooks/finance_monthly.md`

### 3. `pipeline_marketing_realtime` Runbook
- 6ヶ月で 8回 障害発生
- 主原因: Pub/Sub 遅延(50%)/ {{bigquery|*}} ストリーミング失敗(38%)/ その他(12%)
- 対処手順を生成 → `runbooks/marketing_realtime.md`

合計 `runbooks/` に12ファイル生成。各ファイル ~80行、コマンドコピペで対応可能なレベル。

監視設計チェックリスト

  • □ アラートを3階層に分けて Slack チャンネルを分けた
  • □ 各パイプラインに SLO を定義した
  • □ Runbook を全パイプラインに用意した
  • □ PagerDuty / OpsGenie の onCall 設定がある
  • □ 月次でアラート量と SLO 違反をレビューしている
  • □ Runbook を3ヶ月に1回見直している

次回予告

EP.05 では、データカタログを「使われる」状態にする現実解を、ツール選定からメタデータ運用、形骸化回避まで実例で解説します。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp