Databricksのジョブが失敗した場合、いかに素早く検知して対応できるかが運用品質を左右します。 「朝出社したら夜間バッチが全部失敗していた」「障害に気づくのが数時間遅れた」といった事態は 通知の仕組みが不十分なことが原因です。
この記事では、Databricks Jobsで利用できる通知チャネル(Email/Slack/Teams/PagerDuty/Webhook)の比較、 Webhookの設定方法と実装例、失敗検知からチケット起票までの自動化フロー、 そしてSystem Tablesを使ったジョブ実行のモニタリングを解説します。
Databricks Jobsでは、ジョブの開始・成功・失敗・タイムアウト・リトライなどのイベントに対して 通知を設定できます。利用可能な通知チャネルの特性を比較します。
| 通知チャネル | 即時性 | リッチ通知 | 設定の容易さ | 適した用途 |
|---|---|---|---|---|
| 中(メール受信タイミング依存) | 低(テキストベース) | 高(メールアドレスのみ) | 個人への通知・記録用 | |
| 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
}
}'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"
}
}
}'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ジョブが失敗した場合の理想的な自動化フローは以下の通りです。
この構成では、ジョブの失敗から数秒以内にチケットが起票され、担当者にアラートが届きます。 手動での障害検知を完全に排除できるため、夜間バッチの失敗にも即座に対応可能になります。
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 DESCSystem TablesクエリをDatabricks SQLアラートと組み合わせると、 「失敗率が閾値を超えたら通知」「実行時間が異常に長いジョブを検知」といった プロアクティブな監視を構築できます。
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で管理すると、通知設定もコードレビュー・バージョン管理の対象になり、 「誰がいつ通知設定を変更したか」が追跡可能になります。
Workflow Management
問題 1
本番環境の夜間ETLバッチ(ジョブ数: 50以上)を運用している。ジョブが失敗した場合に(1)Slackチャネルに即時通知、(2)Jiraにチケットを自動起票、(3)重大障害は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構文を書かせる問題は少なく、通知戦略の設計(何を・誰に・どのタイミングで通知するか)の理解が問われます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...