Databricks

Databricks JobsのWebhookと通知で失敗通知・運用自動化

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Databricksのジョブが失敗した場合、いかに素早く検知して対応できるかが運用品質を左右します。 「朝出社したら夜間バッチが全部失敗していた」「障害に気づくのが数時間遅れた」といった事態は 通知の仕組みが不十分なことが原因です。

この記事では、Databricks Jobsで利用できる通知チャネル(Email/Slack/Teams/PagerDuty/Webhook)の比較、 Webhookの設定方法と実装例、失敗検知からチケット起票までの自動化フロー、 そしてSystem Tablesを使ったジョブ実行のモニタリングを解説します。

通知チャネルの比較

Databricks Jobsでは、ジョブの開始・成功・失敗・タイムアウト・リトライなどのイベントに対して 通知を設定できます。利用可能な通知チャネルの特性を比較します。

通知チャネル即時性リッチ通知設定の容易さ適した用途
Email中(メール受信タイミング依存)低(テキストベース)高(メールアドレスのみ)個人への通知・記録用
Slack(Webhook経由)高(即時プッシュ)高(Block Kit対応)中(Webhook URL取得が必要)チームへの即時通知
Microsoft Teams(Webhook経由)高(即時プッシュ)中(Adaptive Cards対応)中(Incoming Webhook設定が必要)Microsoft環境でのチーム通知
PagerDuty最高(アラート+エスカレーション)高(PagerDutyのUI内で詳細確認)中(Integration Key設定が必要)本番障害のオンコール対応
汎用Webhook高(即時POST)カスタマイズ次第低(受信側の実装が必要)チケット自動起票・カスタムフロー

実務では複数のチャネルを組み合わせるのが一般的です。 例えば「成功はメール(記録用)」「失敗はSlack+PagerDuty(即時対応)」のように設定します。

通知イベントの種類

ジョブの通知は以下のイベントに対して個別に設定できます。

イベントトリガータイミング通知すべき対象
on_startジョブの実行が開始された時長時間ジョブの開始確認用
on_successジョブが正常に完了した時記録用・後続処理のトリガー
on_failureジョブが失敗した時運用チーム・オンコール担当
on_duration_warning_threshold_exceeded実行時間が閾値を超えた時スタック検知・パフォーマンス監視
on_streaming_backlog_exceededストリーミングのバックログが閾値を超えた時ストリーミングパイプラインの監視

ジョブ通知の設定方法

ジョブの通知設定はUI・REST API・DABsのYAMLから行えます。 REST APIでの設定例を示します。

# ジョブ作成時に通知を設定
curl -X POST \
  "https://<workspace-url>/api/2.1/jobs/create" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "nightly_etl_pipeline",
    "tasks": [...],
    "email_notifications": {
      "on_start": [],
      "on_success": ["[email protected]"],
      "on_failure": ["[email protected]", "[email protected]"],
      "no_alert_for_skipped_runs": true
    },
    "webhook_notifications": {
      "on_failure": [
        {
          "id": "<notification-destination-id>"
        }
      ]
    },
    "notification_settings": {
      "no_alert_for_skipped_runs": true,
      "no_alert_for_canceled_runs": false
    }
  }'

通知先(Notification Destinations)の設定

Webhook、Slack、Microsoft Teams、PagerDutyへの通知はNotification Destinationsとして 事前に登録しておき、ジョブ側からIDで参照する仕組みです。

# Slack Notification Destinationの作成
curl -X POST \
  "https://<workspace-url>/api/2.0/notification-destinations" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "display_name": "Data Platform Slack Channel",
    "config": {
      "slack": {
        "url": "https://hooks.slack.com/services/T00000000/B00000000/XXXX"
      }
    }
  }'

# PagerDuty Notification Destinationの作成
curl -X POST \
  "https://<workspace-url>/api/2.0/notification-destinations" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "display_name": "Data Platform PagerDuty",
    "config": {
      "pagerduty": {
        "integration_key": "xxxx-xxxx-xxxx-xxxx"
      }
    }
  }'

汎用Webhookによるカスタム通知フロー

Slack/Teams/PagerDuty以外のシステムに通知する場合は、汎用Webhookを使います。 DatabricksがPOSTリクエストを送信し、受信側がそのペイロードを処理して任意のアクションを実行します。

# 汎用Webhook Notification Destinationの作成
curl -X POST \
  "https://<workspace-url>/api/2.0/notification-destinations" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "display_name": "Custom Ticket System Webhook",
    "config": {
      "generic_webhook": {
        "url": "https://automation.example.com/databricks-webhook",
        "username": "databricks",
        "password": "secure-password"
      }
    }
  }'

Webhookのペイロードには、ジョブID、ジョブ名、実行ID、実行ステータス、開始/終了時刻などの情報が含まれます。 受信側ではこの情報をパースして、チケット起票・ダッシュボード更新・後続ジョブのトリガーなどを行えます。

失敗検知→チケット起票の自動化フロー

本番環境のETLジョブが失敗した場合の理想的な自動化フローは以下の通りです。

  1. ジョブ失敗: Databricks Jobがエラーで終了
  2. Webhook通知: on_failureイベントでWebhookが発火
  3. 中継サービスで処理: Azure Logic Apps / AWS Lambda / n8nがWebhookを受信
  4. チケット起票: Jira / ServiceNow / GitHubのIssue APIを呼び出してチケットを自動作成
  5. Slack通知: 同時にSlackチャネルにチケットリンク付きの通知を送信
  6. PagerDuty: 重要度の高いジョブの場合はPagerDutyでオンコール担当に即時通知

この構成では、ジョブの失敗から数秒以内にチケットが起票され、担当者にアラートが届きます。 手動での障害検知を完全に排除できるため、夜間バッチの失敗にも即座に対応可能になります。

System Tablesを使ったジョブモニタリング

DatabricksのSystem Tablesには、ジョブの実行履歴や監査ログがDelta Table形式で保存されています。 Webhook通知と組み合わせることで、より高度な監視・分析が可能になります。

-- 過去7日間で失敗したジョブの一覧
SELECT
  job_id,
  run_id,
  result_state,
  start_time,
  end_time,
  TIMESTAMPDIFF(MINUTE, start_time, end_time) AS duration_minutes
FROM system.lakeflow.job_run_timeline
WHERE result_state = 'FAILED'
  AND start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
ORDER BY start_time DESC
-- ジョブごとの失敗率(過去30日)
SELECT
  job_id,
  COUNT(*) AS total_runs,
  SUM(CASE WHEN result_state = 'FAILED' THEN 1 ELSE 0 END) AS failed_runs,
  ROUND(
    SUM(CASE WHEN result_state = 'FAILED' THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
    1
  ) AS failure_rate_pct
FROM system.lakeflow.job_run_timeline
WHERE start_time > CURRENT_TIMESTAMP() - INTERVAL 30 DAYS
GROUP BY job_id
HAVING failed_runs > 0
ORDER BY failure_rate_pct DESC
-- 実行時間の異常検知(平均の2倍以上かかったジョブ)
WITH stats AS (
  SELECT
    job_id,
    AVG(TIMESTAMPDIFF(MINUTE, start_time, end_time)) AS avg_duration,
    STDDEV(TIMESTAMPDIFF(MINUTE, start_time, end_time)) AS stddev_duration
  FROM system.lakeflow.job_run_timeline
  WHERE result_state = 'SUCCESS'
    AND start_time > CURRENT_TIMESTAMP() - INTERVAL 30 DAYS
  GROUP BY job_id
)
SELECT
  t.job_id,
  t.run_id,
  TIMESTAMPDIFF(MINUTE, t.start_time, t.end_time) AS duration_minutes,
  s.avg_duration AS avg_minutes,
  s.avg_duration + 2 * s.stddev_duration AS threshold_minutes
FROM system.lakeflow.job_run_timeline t
JOIN stats s ON t.job_id = s.job_id
WHERE t.start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
  AND TIMESTAMPDIFF(MINUTE, t.start_time, t.end_time) > s.avg_duration + 2 * s.stddev_duration
ORDER BY t.start_time DESC

System TablesクエリをDatabricks SQLアラートと組み合わせると、 「失敗率が閾値を超えたら通知」「実行時間が異常に長いジョブを検知」といった プロアクティブな監視を構築できます。

DABsでの通知設定

Databricks Asset Bundles(DABs)でジョブを定義する場合、YAML内で通知設定を宣言的に記述できます。

# databricks.yml
resources:
  jobs:
    nightly_etl:
      name: "nightly_etl_pipeline"
      email_notifications:
        on_failure:
          - "[email protected]"
        on_success:
          - "[email protected]"
      webhook_notifications:
        on_failure:
          - id: "${var.slack_notification_destination_id}"
      notification_settings:
        no_alert_for_skipped_runs: true
      tasks:
        - task_key: "ingest"
          notebook_task:
            notebook_path: "./notebooks/ingest.py"

DABsで管理すると、通知設定もコードレビュー・バージョン管理の対象になり、 「誰がいつ通知設定を変更したか」が追跡可能になります。

試験で問われるポイント

  • 「ジョブ失敗時にチームに即時通知するには」→ Webhook通知(Slack/Teams)またはPagerDuty
  • 「ジョブの実行履歴をSQLで分析するには」→ System Tables(system.lakeflow.job_run_timeline)
  • 「on_duration_warning_threshold_exceededの用途は」→ ジョブ実行時間が閾値を超えた場合の検知
  • 「通知先を複数のジョブで共有するには」→ Notification Destinationsに登録してIDで参照

問題で確認

Workflow Management

問題 1

本番環境の夜間ETLバッチ(ジョブ数: 50以上)を運用している。ジョブが失敗した場合に(1)Slackチャネルに即時通知、(2)Jiraにチケットを自動起票、(3)重大障害はPagerDutyで担当者に即時エスカレーションしたい。最も適切な構成はどれか。

  1. Notification DestinationsにSlack・PagerDutyを登録し各ジョブのon_failureに設定。Jira連携は汎用Webhook経由で中継サービス(Logic Apps等)からJira APIを呼び出す
  2. すべてのジョブのon_failureにメール通知を設定し、メールルールでSlack・Jira・PagerDutyに転送する
  3. System Tablesを5分ごとにクエリして失敗を検知し、検知時にSlack/Jira/PagerDutyに手動で連絡する
  4. 各ジョブのノートブックにtry-exceptを入れて失敗時にrequests.postでSlack/Jira/PagerDutyに通知する

正解: A

Notification DestinationsにSlack・PagerDutyを登録してジョブの通知設定から参照する方式が標準的です。Jira連携はDatabricksの組み込み機能にないため、汎用Webhook → 中継サービス → Jira APIの構成で実現します。メール転送は遅延やフォーマットの問題があり即時性に欠けます。System Tablesのポーリングは手動介入が必要でリアルタイム性が低いです。ノートブック内のtry-exceptは全ノートブックへの実装が必要でメンテナンス負荷が高く、タスク失敗自体の通知は漏れる可能性があります。

よくある質問

DatabricksジョブのSlack通知はどうやって設定しますか?

2つの方法があります。(1) ジョブ設定のEmail NotificationsにSlackチャネルのメールアドレス(Slackの「チャネルにメールを送信」機能で取得)を登録する方法。これはノーコードで設定できますが、メール形式の通知になります。(2) ジョブのWebhook通知にSlack Incoming Webhook URLを設定する方法。こちらはSlackのメッセージフォーマット(Block Kit等)でリッチな通知を送信できます。どちらもジョブ定義のUI・REST API・DABsのYAMLから設定可能です。

ジョブ失敗時に自動でJiraチケットを起票できますか?

直接的なJira連携はDatabricksのジョブ通知にはありませんが、Webhook通知を中継することで実現できます。ジョブ失敗時のWebhookを汎用Webhook(Zapier、n8n、Azure Logic Apps、AWS Lambda等)に飛ばし、そこからJira REST APIを呼び出してチケットを起票するフローが一般的です。WebhookのペイロードにはジョブID・実行ID・失敗ステータスが含まれるため、チケットの内容に必要な情報を自動で埋め込めます。

Webhook通知はDatabricks認定試験でどう出題されますか?

Data Engineer Professional試験の「ワークフロー管理と運用」ドメインで出題されます。主な出題パターンは「ジョブ失敗時の通知設定方法」「複数の通知チャネルの使い分け」「System Tablesを使ったジョブ実行の監視」です。Webhook URLの具体的なJSON構文を書かせる問題は少なく、通知戦略の設計(何を・誰に・どのタイミングで通知するか)の理解が問われます。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (105件)
© 2026 NicheeLab All rights reserved.