Microsoft Fabric の Eventstream (イベントストリーム) を使ってみる - Entra ID ログを Event Hubs 経由で Lakehouse / Eventhouse にストリーム

# 本記事について

本記事では、Microsoft Build 2024 でパブリックプレビューとなった Microsoft Fabric の Real-time Intelligence / Real-time Hub の中の Eventstream (イベントストリーム) を試してみたいと思います。

https://qiita.com/yangjiayi/items/287bf2d6a2fafee6b3f2#real-time-intelligence-%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%E3%83%97%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC

題材としては、Entra ID (顧客向け Entra ID) のログを Event Hubs 経由で Fabric の Lakehouse と Eventhouse に送るシナリオを見ていきます。(実際の利用では送り先は Lakehouse or Eventhouse を選ぶことになるかと思いますが、本記事では一度に両方に送る形で構成してみます。)

下記記事で、顧客向け Entra ID のログ分析を行う手法をいくつかご紹介しましたが、Real-time Intelligence を活用することで、リアルタイムで Fabric にデータを取りこみ分析できるようになります。

https://qiita.com/YoshiakiOi/items/e210d48f204f0e58ab8e#-%E8%A8%BA%E6%96%AD%E8%A8%AD%E5%AE%9A-log-analytics-blob-storage-event-hubs-%E3%81%AB%E3%82%88%E3%82%8B%E3%83%AD%E3%82%B0%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88

# 事前準備

Microsoft Fabric に入る前に、いくつかリソースを事前に用意しておきます。

## Event Hubs の準備

Microsoft Fabric と同じテナントにある Azure サブスクリプションに Event Hubs (Event Hubs 名前空間と Event Hub) を用意しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/66b90bc5-ee25-6861-a8f8-f49ee8f106b9.png)

また、今回は顧客向け Entra ID を使うため、そのテナントに対して Lighthouse で権限委任を行い、顧客向け Entra ID 側から、その Event Hubs を操作できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/a0a42365-b909-5b46-fb32-58f673bdecb5.png)

## 顧客向け Entra ID の診断設定

Entra ID の診断設定で、対象の Event Hub に対してログを送るように設定しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/27f0a588-4cec-4d31-c507-d936c9f8e504.png)

# Microsoft Fabric の構成

Fabric でワークスペース、Lakehouse, Eventhouse をそれぞれ準備しておきます。

## Eventstream の作成

Event Hubs からデータを受け取り、Lakehouse や Eventhouse に送信する Eventstream を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/0a46e51b-202b-cef3-3659-f75e3971c52a.png)

source として、Azure Event Hubs を選び、コネクションを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/6173aba0-789d-bf6b-101a-2196f21ec6f5.png)

destination として、準備した Lakehouse と Eventhouse を追加します。それぞれテーブルを新規で一つ作成します。そのままでも、データを送ることはできますが、Entra ID のログは records 欄に配列で複数レコード入るようになっています。これでは分析がしづらいので、Event processing editor で、配列を各レコードに分けるようにします。editor を開き、Eventstream と Lakehouse / Eventhouse の間に operations の expand を追加します。そして、records の配列を分割します。(そして、Lakehouse 側は、その後の処理を一個追加し Manage fields の操作で ArrayValue_records の Type を String にしておきます。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/cf94d773-2c25-6f02-df42-7a8b3004a54f.png)

それらの設定が完了すると、下記のようなフローが出来上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/fd19f9c8-975f-1e72-e019-9db881ed0fa9.png)

今回は editor で配列の分解のみを行いましたが、フィルター処理やフィールドの追加なども行えるので、実際のシーンではそれらを利用したほうが後々分析をしやすくなります。

## Lakehouse と Eventhouse でのデータの確認

Eventstream で新規作成したテーブルにデータが格納されていることを確認します。

### Lakehouse

Lakehouse 側では、SQL でクエリを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/0c0e51dd-7892-2c65-b840-8e1b005327ff.png)


### Eventhouse 

Eventhouse の KQL Database のテーブルに対しては、Kusto クエリをかけることができます。たとえば下記のように見ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/48183dcc-fb45-ded7-1d63-d57c24d23d98.png)

それぞれのデータは Power BI をはじめ、Fabric の各種分析・可視化ツールで活用できます。


# 最後に

＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。