みなさん、こんにちは!
Azure Databricks でジョブ実行を監視し、失敗した場合に通知する方法についてまとめました。
通知方法は主に以下の2通りです:
- ログベースのアラート通知
- ジョブ設定によるアラート通知
それぞれについて、以降で詳しく解説します。
ログベースのアラート通知
Log Analytics を利用し、5分毎にジョブの実行ログを確認して失敗した記録があればアラート通知を送信する方法です。
設定手順は以下の通りです。
1. アクショングループ作成
通知先となるアクショングループを作成します。
Azure ポータルで「モニター」を開き、「アクショングループ」をクリックします。
基本設定を入力したら「通知」タブに移動し、通知タイプと内容を設定します(今回はメールで通知したいため、「電子メール/SMS メッセージ/プッシュ/音声」で設定)。
以上でアクショングループの作成は完了です。
2. Log Analytics ワークスペース作成
Databricks のログ格納場所となる Log Analytics ワークスペースを作成します。
3. アラート設定
対象のワークスペースを開き、「ログ」で以下のクエリを実行します。
DatabricksJobs
| where ActionName contains "Failed" and TimeGenerated > ago(5m)
上記はジョブ実行履歴のうち失敗(Failed)となったもので、5分以内のログを検索するクエリです。
検索クエリが先ほど実行したものと合っていることを確認します。
測定はクエリに関する設定で、以下のように設定します。
- メジャー:テーブルの行
- 集計の種類:カウント
- 集計の粒度:5分
アラートロジックは以下の通り設定します。
- 演算子:次の値より大きい
- しきい値:0
- 評価の頻度:5分
上記設定によりクエリが5分ごとに実行され、5分の間に実行結果が1件でもあればアラート通知が送られます。
アクションには設定したアクショングループを指定します。
- サブスクリプション:対象のサブスクリプション
- リソースグループ:対象のリソースグループ
- 重大度:通知の重要度。今回はエラーとする。
- アラートルール名:通知の際に表示されるアラートルール名
- リージョン:アラートルールのリージョン
「確認および作成」をクリックし、問題がなければ「作成」をクリックします。
以上でアラートの設定は完了です。
上記の設定後にジョブ実行が失敗した場合、以下のような通知メールが送信されます。
ジョブ設定によるアラート通知
Databricks で、ジョブごとにアラート設定を行うことも可能です。
ジョブ作成画面の「ジョブ通知」で、「通知を編集」をクリックします。
ポップアップで「通知を追加」をクリックし、配信先を設定することができます。配信先はメールアドレスに加えてWebhook、Slack、Teamsなどが選べます。
設定後にジョブ実行が失敗した場合、以下のような通知メールが送信されます。
「View run in Databricks」のリンクから該当ジョブの実行結果詳細を確認可能です。
補足
Databricks のシステムテーブルsystem.lakeflow.job_run_timeline
にもジョブの実行履歴は記録されますが、診断ログに比べて反映のタイミングが遅いです。
実際に試した結果は以下の通りで、診断ログはジョブ失敗から6分後には反映されてメール通知されたのに対し、システムテーブルに反映されたのはジョブ失敗から約20分後です。
イベント | 時刻 |
---|---|
ジョブ失敗 | 13:48 |
診断ログ反映 | 13:54 |
メール通知 | 13:55 |
システムテーブル反映 | 14:07 |
システムテーブルに対して定期的にクエリをかけ、ジョブが失敗した記録があれば通知・・・という方法も検討しましたが、コストの観点からも、システムテーブルより診断ログを利用した方法のほうが良さそうです。