Microsoft Fabric を利用して Blob ストレージに格納された Azure ログを分析する

# 本記事について

2023年の5月の Microsoft Build にて、Microsoft Fabric という SaaS 型のデータ分析基盤がプレビューリリースされました。このサービスの登場で、マイクロソフト製品におけるデータ分析のとりうるアーキテクチャが大きく変わることになります。その中で、Azure のログ分析についても例外ではありません。本記事では、Azure のログ分析という Azure ユーザーでは誰しもが考えないといけないタスクについて、Microsoft Fabric を導入するとどう変わるのかを見ていきます。

https://learn.microsoft.com/ja-jp/fabric/

# Microsoft Fabric について

Microsoft Fabric については、下記の Qiita の記事が日本語で全体を網羅する形で情報をまとめてくださっています。特に大きなポイントが、データの分析に必要なすべての機能が SaaS として一か所で提供されているという点です。

https://qiita.com/yangjiayi/items/605d9679e1e35d391a1a

特に、本記事の主題であるログ分析という観点だと、ログの格納先となるデータレイク (OneLake), ログの検索先となる KQL データベース、その間のデータコピーを行うパイプライン、ダッシュボード機能を担う Power BI がまとめてひとつのサービスの中で提供されます。

今までは、もし同じようなことを実現しようとすると、Azure Blob Storage (Data Lake Gen2), Azure Data Explorer, Azure Data Factory, Power BI などを組み合わせてシステムを作る必要がありました。それが、Microsoft Fabric では一か所で完結することができます。

# Azure のログについて

Azure のログには、Azure 自体の監査ログであるアクティビティログ、各リソースが固有で記録するリソースログ（診断ログ）、Azure AD のサインインログ・監査ログなどがあります。これらは、以下の送信先を指定することができます。

* Log Analytics ワークスペース - リアルタイム分析が必要なログの送信先。Azure Monitor や Microsoft Sentinel などで利用。

* Event Hubs - サードパーティ製のログ監視ツールとの連携用。

* ストレージアカウント (Blob Storage / Data Lake Gen2) - ログの長期保管用。

このうち、ストレージアカウントに保管するときの良く出てくる悩みが、格納するのは良いものの、いざという時に分析することができない、というものでした。この悩みを Microsoft Fabric で簡単に解決することができます。

# Microsoft Fabric を利用して Blob ストレージに格納された Azure ログを分析する

ここから実際に、Azure のログをストレージアカウントに送信し、Microsoft Fabric で分析する流れを見ていきます。なお、本記事の全体のアーキテクチャの概略図は下記になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/06ce420b-bf7d-e3b2-1db6-6c45d8567079.png)

## Microsoft Fabric の準備

### Microsoft Fabric の試用版の利用開始

2023年6月時点、Microsoft Fabric は下記ドキュメントの手順で試用版を利用できます。試用版やその利用開始については、都度最新の情報をご確認ください。

https://learn.microsoft.com/ja-jp/fabric/get-started/fabric-trial

### ワークスペースの作成

Fabric では、ワークスペースという単位でリソースを管理します。今回は、Azure ログ分析用のワークスペースを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/9db607cb-c12f-d452-aa4b-fb42ccb3b572.png)

### OneLake で Lakehouse を作成

Fabric 上でログデータを管理するためのレイクハウスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/e00ecdde-13eb-fd91-d3af-f93f41b49171.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3007982e-84a6-bfe8-0026-220ec2608e10.png)

## Azure ログのストレージアカウントへの送信

### ストレージアカウントの作成

ログの送信先となるストレージアカウントを Data Lake Gen2 として作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/bbf5ed3b-bdf8-3c2a-8275-24fea07a5f40.png)

### ログのストレージアカウントへの送信

今回は、Azure アクティビティログをストレージアカウントへ送信します。Azure Monitor のエクスポート画面から実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/aae0211d-826f-fa7a-f759-ce4319fe4f47.png)

実際にログが送られると下記のように格納されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/16818b0a-d458-e0af-76c0-cbc23215afd5.png)

## Microsoft Fabric のショートカットで Data Lake Gen2 を OneLake (Lakehouse) のデータとして認識させる

Microsoft Fabric の OneLake (Lakehouse) には、ショートカットという、外部のストレージをデータコピーなしで Fabric のストレージとして扱えるような機能があります。ここでは、Azure Data Lake Gen2 を選択します。

https://learn.microsoft.com/ja-jp/fabric/data-engineering/lakehouse-shortcuts

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/c8a972a4-f24b-cae0-349c-a9282c39e965.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/4b53267e-e965-1538-d0ab-312a2aadadc7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/1b0ca329-c83b-998e-a79c-31f53fb72f7a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/a8df955d-d32e-bdca-6ee7-15a348e31b8d.png)

ショートカットを作成すると、Lakehouse の画面から、Data Lake Gen2 のコンテナーの内容が見れるようになります。これで、ログデータを Fabric の様々な分析機能で解析することができるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/13cd7234-ddfc-a4a8-360e-72635d9cb31d.png)

## KQL データベースへのデータの取り込み

今回は、Microsoft Fabric 内の KQL データベースから分析してみたいと思います。これにより、Log Analytics や Application Insights と同じクエリ言語でデータを扱うことができます。KQL データベースへデータを入れるには、ファイル単位で一回きりで取り込む方法と、パイプラインを作成しまとめてコピーする方法があります。

### KQL データベースを作成

KQL データベースを作成するには、ワークスペースの＋新規から KQL データベースを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3f0eb7ed-82d2-830b-d792-5de5174beb24.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/0fd278f0-b8d3-1fa3-3e0a-4ca936d7a3ba.png)

### ① ファイルを一回きりの取り込みとして格納する

一回きりの取り込みは、データの取得から OneLake を選んで行います。Blob を直接指定することもできます。データの取り込みの設定はデフォルトで進めています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/47b8f06b-fbf8-7019-b9b7-636982ece880.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/fb8555e5-6f14-c9aa-ba78-22526491807b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/b50a87f8-67b0-91ed-7ce3-730c80770c10.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/09a8af9f-481d-b9c9-40b5-6116764baab1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/ed7e9acf-4b84-9c8f-9c68-8007e9cfccbf.png)

実際に取り込むと、データの確認で、KQLのクエリを書けて中身を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/57241ee6-d2ea-4a5b-c54d-30513ed8fdba.png)


### ② パイプラインを作成し、OneLake から KQL データベースへデータをコピーする

ファイルをまとめて取り込みたいときや、連続的に取り込みたいときは、パイプライン（データパイプライン）を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/4f2c34d6-cbe2-91b8-0ff0-e893381eb9d5.png)

Copy data のアクティビティを追加し、ソースと宛先を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/69399c4a-d141-daa4-3105-dec17658147a.png)

ソースは Lakehouse を指定し、アクティビティログの場合はワイルドカードパスを下記のようにしました。データのプレビューでパスが正しいかを確認できます。

＜左＞
```
<レイクハウスのフォルダ名>/resourceId=/SUBSCRIPTIONS/*/y=*/m=*/d=*/h=*/m=*/
```

＜右＞
```
*.json
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/3f4a6ee5-bcc6-9f3b-fe67-e6856bd265ff.png)

また、宛先のテーブル名は①で作成したものを選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/325eab2d-7121-6c8a-92b0-bd94bdf8fad8.png)

パイプラインが完成したら、Validate して Run します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/1a8e48f1-8769-5b82-c3b3-995576da8ce1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/79212ab8-feb8-0fa2-6ec1-0415e259d22b.png)

下の出力タブでアクティビティの状態を監視できます。うまくいけば下記のように成功となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/dabb39d6-afc4-15cf-3b61-2b8b0a6d3c43.png)

## KQL データベースでの検索

②まで進むと、かなりのデータが入っているかと思います。データの確認からクエリを投げるとログが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/10c070a3-62f2-b927-e9c7-7c5824cf84bf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/a66af41d-c978-a1e0-683a-61d222e0751e.png)

## Power BI での可視化（後日加筆予定）

Power BI レポートの構築をクリックすると、簡単に Power BI レポートを作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/175dbe27-b08c-3a3f-518b-e6ec35b47ad4.png)

左上のファイルから保存を選択すると、.pbix ファイルとしてワークスペースに保存もできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/b9738297-d06c-a878-0506-749f7332a4f5.png)

保存がされると、Power BI のレポートとデータセットがワークスペース内に作られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/fb5f9303-9933-84a5-a756-91ea4200ff67.png)

ダッシュボードを作成し、レポートをダッシュボードのタイルにピン留めすることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/ce3a2e2f-acd8-60f2-2a3d-5dbb54ab755d.png)

## KQL より SQL 文でデータを検索したい場合 - OneLake 上でテーブルとして保存

レイクハウス上でファイルではなくテーブルとして保存することで、SQL 文のクエリでログデータを扱うこともできます。

新たにパイプラインを作成し、ファイルからテーブルに変換します。今回は Copy data のアクティビティで宛先をテーブルにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/0d9f29c6-7459-a93d-c473-6f49b4965c56.png)

パイプラインが実行され成功となると、レイクハウスのテーブル側にデータが入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/a7dc3f18-78a9-dd5b-4cd8-e95f840f5c19.png)

レイクハウスの SQL エンドポイントのページを開くと、そこで SQL 文のクエリをかけることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/e4f24798-e24f-6b9d-99c6-3a1bb7b54240.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276225/8b614aed-dd2f-d8b7-e08d-a319b9c4fa6f.png)


# 最後に

Microsoft Fabric は 2023年6月時点でパブリックプレビューのため、製品の公式ドキュメントにある注意書きに従ってご利用ください。

https://learn.microsoft.com/ja-jp/fabric/get-started/microsoft-fabric-overview

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