Fabric データパイプラインの監視方法について  - 新しい Fabric ジョブイベントを使用したエラー通知 - 

## はじめに

Fabric データパイプラインの監視方法について紹介します

## 基本

[Microsoft Fabric でパイプラインを使用してデータを取り込む](https://microsoftlearning.github.io/mslearn-fabric.ja-jp/Instructions/Labs/04-ingest-pipeline.html) のチュートリアルを例に説明します。

### 実行結果の確認

パイプラインを実行すると、出力タブにて各アクティビティの実行結果が確認できます。

実行中：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/34159781-3407-fb81-4133-cbbc5b09fc6e.png)

実行後：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/bad288fd-1ca2-675f-db09-7652f35b9d8d.png)



制御フロー系のアクティビティでは、単純な出力結果が json で確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6262f634-d01c-d4eb-71da-9c3d06143d8a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/56ebf28e-1c99-2d02-1a5a-82f6ef0597ff.png)


データのコピーなどのデータ処理系アクティビティでは、処理のパフォーマンス情報にアクセスできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/363424d6-6f12-fc9a-1272-2c44cdff8794.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6dc5e286-b028-0efb-9f98-698524cdc1a7.png)


また、ノートブック呼び出しなどは、その時実行されたノートブックのスナップショットにアクセス可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/29948ff5-92fe-0a63-721f-5f352e6698f2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/87fb06ff-8092-512e-b50a-4c319e96aa63.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8090add5-5afc-b143-3609-8e5dfea1c464.png)

### スケジュールと実行履歴

スケジュール設定では、毎日何時、毎週何曜日、毎月何日、などの実行タイミングの設定が可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/fc7deb66-ff1b-a905-1b75-35be5ad4e8e5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/16824448-2c44-4791-bc38-89ded0132f18.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/590eb861-3af2-fc10-e4c7-5de6838c1464.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e787358e-13ae-ca64-15d4-c466864a0179.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/29e2c799-4409-756b-4def-b40cb6127079.png)


また、実行履歴からはそのパイプラインの過去の実行を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f8c09d30-aa24-fac7-ebc9-65b8a0313ddf.png)


### 監視ハブ

監視ハブでは、14日間のパイプラインその他のジョブすべての実行結果が確認可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/803e1e9b-4ee5-508e-14d5-5ebd27618a0a.png)


パイプラインの実行をクリックすると、上述の実行履歴と同様に当時の実行結果が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7297e28b-203c-949f-094a-5f92ed169822.png)


## エラー通知方法について

では、エラー通知について記載します。

### パイプラインアクティビティによる通知

通知系のアクティビティを使用してメッセージを作成して送信が可能です。

:::note info

最後のアクティビティのスキップまたはエラーを条件に通知処理を追加することで、すべて成功しなかった場合に実行されるアクティビティとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ba1ca86e-5d63-be8e-ea66-a0c399015710.png)
※この画像では、Activity2 までのすべての処理が成功しない場合に GenericErrorHandle1 のフローに進んでいます

引用：https://learn.microsoft.com/ja-jp/azure/data-factory/tutorial-pipeline-failure-error-handling#generic-error-handling

:::

#### Outlook アクティビティ


スキップおよびエラー分岐から　Office 365 Outlook アクティビティを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ffabcb90-1ed7-a3fb-7bf8-3d29dca7a036.png)


サインインして、メール送信先と内容を決定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a0083c4f-c735-ecff-d99d-5798f3e520d7.png)


この時、動的なコンテンツ（システム変数などの情報）を使用して、URLの記載などが可能です。

参考：[Microsoft Fabric データパイプラインのエラー通知機能に監視ハブURLなどの情報を記載する](https://qiita.com/ryoma-nagata/items/38b1ac2110c3b61c1525)

途中のアクティビティの失敗によりメール通知のアクティビティが実行されると、サインインしたアカウントによりメールが自動送信されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b5d41387-7b0e-638a-0199-379e7376abba.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/92feaa4d-3ec9-0eec-8a83-25579483fe8c.png)


#### Teams アクティビティ

スキップおよびエラー分岐から　Teams  アクティビティを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b4cb7ca3-7101-8b93-5d1d-1de24d5cafac.png)


サインインして、投稿先と内容を決定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/80431e50-bad1-4425-f917-1ccbdf72e360.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/16b13091-3cad-696e-73ef-5bad4d9a683c.png)

途中のアクティビティの失敗によりTeamsのアクティビティが実行されると、サインインしたアカウントにより自動投稿されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/42dfe9fc-5452-63f7-b3d6-751f0cad6523.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/125a630e-eb95-eca6-1666-f62de4d022b7.png)


### パイプラインアクティビティによるエラー通知の問題点

#### 1. アクティビティをセットアップしたアカウントから送信される

前述でご覧の通り、アクティビティを設定したアカウントから送信されるので、退職後などに問題が発生します。
単純に個人からジョブの通知が送信されるのも気持ち悪いですね。

これについては、専用のアカウントを作成すればよいかもしれませんが、Officeのライセンスが必要となってしまいます。

#### 2. エラー通知はすべての検出したいアクティビティから個別で接続が必要

:::note alert

このデメリットは[パイプラインのエラーハンドリングの実装方法](https://learn.microsoft.com/ja-jp/azure/data-factory/tutorial-pipeline-failure-error-handling#generic-error-handling)で回避できることがわかりました。
ご指摘ありがとうございました。

:::

### 新しい Fabric Job イベントを利用した通知

[Fabric Real-Time Hubの新しいイベントカテゴリーの発表](https://blog.fabric.microsoft.com/en-us/blog/announcing-new-event-categories-in-fabric-real-time-hub?ft=All) にて、監視ハブで確認できるジョブについてリアルタイム監視ができるようになりました。

これからの推奨方法はこちらになるかと考えられます。

#### リアルタイムハブによる Fabric job イベントデータ取得

[リアルタイムハブ](https://learn.microsoft.com/ja-jp/fabric/real-time-hub/real-time-hub-overview)　は、 ストリームデータ（Kafka トピックなどのストリームデータソース、データベース CDC ,Fabric イベントなど ）を取得するためのカタログです。

リアルタイムハブにアクセスすると、現在アクセス可能なストリームデータソースや、ストリームデータソースに接続するためのウィザードにアクセスできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/f5c27fc0-e975-4932-25e6-cdb919c53921.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/dfed15a1-8381-622e-0bfe-859b1f359535.png)

今回の発表で、[Fabric ジョブイベント](https://learn.microsoft.com/en-us/fabric/real-time-hub/create-streams-fabric-job-events) と、[OneLake イベント](https://learn.microsoft.com/en-us/fabric/real-time-hub/create-streams-fabric-onelake-events)が対象のソースとして追加されました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a07a06fb-2b09-6dd0-84ea-db99e0a5b4f2.png)

ジョブイベントの詳細

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b9ac20a0-d40b-633b-2471-b52ada3913bf.png)

OneLake イベントの詳細

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/641c5159-605d-abc9-25fd-3d42fe75e55e.png)


#### アクティベーターによるエラー通知のセットアップ

:::note warn

どうも手順か機能自体に問題がありそうなので追って修正します。

2025/02/14 : 修正が展開されたので、リアルタイムハブでのエラーイベント取得によるセットアップ手順を追記。フィルタを用いた方法は確認中

:::



Fabric ジョブイベントを使用して、エラー通知を構成してみます。

##### リアルタイムハブでのエラーイベント取得によるセットアップ手順

リアルタイムハブから、ジョブイベントのアラート設定にアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0048d15b-d7eb-0562-ef43-a944e4bd220f.png)

ソースとなるイベントを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7e4f05cf-a943-aa99-75fa-750e34adef9c.png)

イベントの種類で **Microsoft.Fabric.JobEvents.ItemJobFailed** を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/87b56055-6722-4d77-a640-a45b51d722f3.png)

監視対象のパイプラインを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/8aaa448d-91a0-4a50-a8de-e2a2f7c75021.png)

スケジュール実行のみを監視する場合にフィルタを使用します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2558a8a2-8936-497d-b563-cfc1d3db1617.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d675959d-52fe-44d1-9101-4e1683beedfe.png)


アラートの出し方とアクティベータの保存先を決定して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/e4d55fe5-5346-4031-a5fd-aaa6c1841e7e.png)

作成されたアクティベータを開き、ソースの管理にて設定内容を確認できます。アクティベータの CU 消費は取得したイベントの量で決まるはずなので、こうしたケースではイベントは複数とるようにも狙い撃ちしたほうが良いかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1691ffa3-2f9f-48e9-8720-3a21ac75ebcc.png)

アクションの詳細を設定します。おすすめは以下のように、監視ハブへの URL と検索用の jobInstanceId を併記してやることです

※一度エラーを発生させないとプロパティを追加できない点に注意。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c34454af-1d19-41d2-9618-b10099352efa.png)

```
​
workspaceName ワークスペースの itemName でジョブ エラーが発生しました。
https://app.fabric.microsoft.com/monitoringhub?experience=fabric-developer から
jobInstanceId を検索し、内容をご確認ください

```

以下のように通知されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1e175a78-cfd3-4ab5-8367-5c8266f4ebec.png)

この jobinstanceId を監視ハブで検索することでエラーを発見できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/edc34753-18d0-4908-a3c7-501159168608.png)


##### アクティベータではすべてのイベントを取得したうえでルール側でのフィルタ条件を使用した手順

アクション側のフィルタを活用する手順です。

リアルタイムハブから、ジョブイベントのアラート設定にアクセスします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0048d15b-d7eb-0562-ef43-a944e4bd220f.png)

ソースとなるイベントを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7e4f05cf-a943-aa99-75fa-750e34adef9c.png)

対象イベントは4つありますが、一旦すべて取得でいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/ef81be53-29f1-46b2-6b53-ab1c05cd70d0.png)


現在のところ、ワークスペースで発生するジョブ全体を取得できず、指定したアイテムでのジョブイベントが取得可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/5b1be8ab-4aef-5c88-a5d9-902eb7bfd996.png)

フィルタ設定はここではやめておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/60eafaf6-e174-8d0a-21d0-0eb6217f214a.png)


設定を確認したら保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3155a361-5806-b421-9fa8-b447d21e1228.png)


対象のイベントが発生するたびにアクションとしてメール通知されるようにしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6998a360-7f82-a4f3-182d-be7a736aae03.png)

また、この設定が定義されるアイテムである、 **アクティベーター** の名前と保存先を決めてやります。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/6cb07d85-9333-4b50-d003-2fcf9950717e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b62133e0-eea6-6a80-3210-cd6234b7c073.png)

作成すると、アクティベーターアイテムとアクティベーターに接続されたストリームデータソースが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/d47ad808-b744-cc82-caa8-96acf524f085.png)

アクティベーターを開くと、先ほど定義したルールが設定されていることがわかります。まだ条件設定をしていないので一旦停止しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/803c1d13-7b9e-8f6e-55a8-59bc4dbca466.png)


##### 取得したイベントの内容

アラートを設定した対象のイベントをクリックすると以下の情報にアクセスできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c397d0b1-91ba-c88c-8cf7-ac091a657c5f.png)


ライブフィード：

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/92671257-9394-7421-4d31-431cb319f4a6.png)

最初は空の状態になるので、パイプラインを実行してイベントを起こしてやると、10分ほど時間経過後にフィードが表示されるようになります。



重要な項目としては 対象のアイテムとジョブの実行IDが入った Type ,invokeType、jobStatus などでしょうか

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/31618a45-303d-474a-7bb9-bb25fc8a00ec.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/1871d3c3-ff63-5bb8-5d7f-8ca2f31ade6e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/7827ffcd-9a1c-cd64-031b-016fd2f10bb1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/bea87b4e-82b9-3b8e-7584-80ed6c2e5b16.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/813c9d67-606d-8762-c5ce-181766215c71.png)


分析：

イベントがどれだけの数発生しているかが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/a573a794-1659-0aca-d45d-a86ee447ee94.png)


ソースの管理：

リアルタイムハブで行った設定が入っていますね

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/bb41e9b5-ff2d-f44f-bdc2-f51f5ac68501.png)


##### アラート設定の評価結果

アラート設定に移動すると、作成時に指定した内容が表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/b7c76e56-5f01-f4d6-325e-cb2b81cd2abc.png)


条件内容を変更していくと評価結果に応じて定義での評価結果が変化します。

すべての値ではなく、ここでJobStatus=Failed、invokedType=Scheduledを条件として設定してやることで、スケジュール実行が失敗したときのみの条件となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3889b7c9-be7f-54d9-1578-0fad4428abf6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/08ee545d-bade-8937-d80f-43704e3554ad.png)


:::note info

最初の取得でjobFailedのソースとしたイベントで検証時に、重複カウントが発生し、すべての値ではなく条件をつけてやると評価が正しくなるという事象がありました。（想定された動作かは後々確認予定）

:::


アクションの編集をクリックするとメッセージのプレビューが確認できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/c0ed1053-ac68-0b0d-4793-f9301b48bd0f.png)

メッセージを編集します。
ここでメッセージに監視ハブの検索で使えるjobInstanceIdをコンテキストとして追加しておきましょう。（監視ハブに飛ぶURLでも作ろうと思いましたが、空白が入ってしまい作れませんでした。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/683dbcac-64dc-7f27-ccfb-af3fd7aedcf2.png)


テストアクションを送信してやると、以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/17c4f60b-e59c-44e8-3d1f-355d6aba8008.png)

:::note info

監視ハブで、jobInstanceIdを検索してやることで、ジョブを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/98445468-e229-8fed-0b7c-c4b51a25fa16.png)


:::

アラートの評価が正しいことを確認できたら保存して開始するとパイプラインのエラー通知が有効となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0047ce58-4d68-3dcf-6a96-2cbb76cf9bfb.png)

なお、アクションはメールのほかにも Teams や、 Power Automate (プレミアムコネクタが必要)が利用できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/2de4c3d6-bcba-bb4d-4dea-c84db304819f.png)

##### 従来のパイプラインアクテビティと比べてまだイマイチな点

- メッセージの中に直接リンクなどを埋め込めない
- Teams の場合、あて先は個人チャットのみ

※気づき次第追記予定

制限事項：https://learn.microsoft.com/ja-jp/fabric/real-time-intelligence/data-activator/activator-limitations

#### 補足：ジョブイベントの内容

アクティベーター内では他のイベントを追加することも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/3bc383c2-fb74-25ee-308e-12ce8a5e8c26.png)

リアルタイムハブのようなものが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281819/0dca2486-907b-29f3-7cd0-5ab6029725a8.png)

#### その他アクティベータ参考

- https://learn.microsoft.com/en-us/fabric/real-time-intelligence/data-activator/activator-create-activators