Fabric Unified Admin Monitoring (FUAM) の設定

## FUAM とは？
Fabric Unified Admin Monitoring の略で、Microsoft Fabric の管理と監視を補強するソリューションです。適材適所で提供されている**既存のモニタリングの仕組みからデータを抽出・変換・蓄積して、串刺しで分析**できるように作られています。(要するに、公式が提供している管理・監視の仕組みがバラバラなので、有志が統合的に見られる仕組みを作ったということですね。)

https://github.com/microsoft/fabric-toolbox/tree/main/monitoring/fabric-unified-admin-monitoring

![image.png](https://github.com/microsoft/fabric-toolbox/blob/main/monitoring/fabric-unified-admin-monitoring/media/general/fuam_monitoring_map_cover.png?raw=true)

GitHub で公開されており、パイプライン、ノートブック、レイクハウス、セマンティック モデル、Power BI レポートなどの Fabric アイテムに基づいて構築されています。よって、**Fabric/Premium 容量があることが前提**です。

![image.png](https://github.com/microsoft/fabric-toolbox/blob/main/monitoring/fabric-unified-admin-monitoring/media/general/fuam_architecture.png?raw=true)

::: note warn
FUAM Solution Accelerator は **Microsoft の公式製品ではありません**。これは、Fabric 内に監視ソリューションを実装するのに役立つソリューション アクセラレータです。そのため、公式のサポートはありません。たとえば、Capacity Metrics データの抽出は Capacity Metrics アプリに基づいており、そのアプリが変更されることにより、FUAM に影響を与える可能性があります。
:::

### ベースとなっている既存のモニタリングの仕組み
このソリューションの基となっている機能を簡単な概要とともにリストします。
#### Admin Monitoring (管理者監視ワークスペース)
**Fabric 管理者** がテナント内のワークロード、使用状況、ガバナンスを監視および管理できるように設計された専用の環境です。管理者用の特別なワークスペースが作成され、現在 **[Content Shareing](https://learn.microsoft.com/ja-jp/fabric/admin/content-sharing)** (コンテンツ共有レポート)、**[Feature Usage and Adoption](https://learn.microsoft.com/ja-jp/fabric/admin/feature-usage-adoption)** (機能の使用状況と導入レポート)、**[Purview Hub](https://learn.microsoft.com/ja-jp/fabric/governance/use-microsoft-purview-hub)** という3種類のレポートが提供されています。

https://learn.microsoft.com/ja-jp/fabric/admin/monitoring-workspace

#### Capacity Metrics アプリ
Microsoft Fabric Capacity Metrics アプリは、Microsoft Fabric 容量の監視機能を提供します。**Fabric 管理者や容量管理者**は、アプリを使用して容量の消費量を監視し、容量リソースの使用方法に関する情報に基づいた意思決定を行います。 たとえば、容量をスケールアップするタイミングや、自動スケーリングを有効にするタイミングの判断に使用します。

https://learn.microsoft.com/ja-jp/fabric/enterprise/metrics-app

Capacity Metrics アプリについてはこちらもご覧ください。

https://jpbap-sqlbi.github.io/blog/powerbi/pbi_capacity_metrics/

#### ワークスペースの監視
ワークスペース内の Fabric アイテムからログとメトリックを収集して整理する、Eventhouse データベースがワークスペースに作成されます。**ワークスペースの共同作成者以上の権限を持つユーザー**は、データベースに対してクエリを実行して、Fabric アイテムのパフォーマンスの詳細を確認できます。

https://learn.microsoft.com/ja-jp/fabric/fundamentals/workspace-monitoring-overview

#### セマンティック モデルの操作ログ
ワークスペース監視 ログの一部であり、Fabric Real-Time Intelligence の一部である Eventhouse KQL データベースに登録されます。 これらのログを使用して、ワークスペースの使用状況とパフォーマンスを監視できます。

https://learn.microsoft.com/ja-jp/power-bi/enterprise/semantic-model-operations

#### INFO.VIEW DAX関数
セマンティック モデル内のテーブル、カラム、メジャー、リレーションシップの一覧を取得できます。
**セマンティック モデルの管理者アクセス許可**が必要です。**ワークスペース管理者のアクセス許可**が必要なものもあります。

https://learn.microsoft.com/ja-jp/dax/info-functions-dax

#### Semantic Link & Semantic Link Labs
セマンティック リンクにより、**Python でセマンティック モデルや Fabric の管理 API を利用できます。** FUAM は上記の機能により取得されるデータを収集してレイクハウスに蓄積する、一連のノートブックを用意しています。
**セマンティック リンク**の Power BI 接続機能は、中核となる機能で、次のようなことが可能です。
- Power BI のセマンティック モデル、テーブル、メジャーを検出
- read_table を使用してテーブルからデータを読み取る
- evaluate_measure を使用したメジャーの評価
- DAX 式を評価 (高度なユースケース)

https://blog.fabric.microsoft.com/en-US/blog/semantic-link-use-fabric-notebooks-and-power-bi-datasets-for-machine-learning-data-validation-and-more/

https://learn.microsoft.com/ja-jp/fabric/data-science/semantic-link-power-bi?tabs=sql

https://learn.microsoft.com/ja-jp/fabric/data-science/read-write-power-bi-python

**Semantic Link Labs** は、Microsoft Fabric ノートブックで使用するために設計された Python ライブラリです。このライブラリは、Semantic Link の機能を拡張し、シームレスに統合して連携するための追加機能を提供します。

https://github.com/microsoft/semantic-link-labs

## FUAM の前提条件
- **Power BI Premium または Fabric の容量**
(PPU、Pro の "共有" ワークスペースはサポートされていません)
- テナントに**サービス プリンシパルを作成する権限**
- テナントに**ワークスペースを作成する権限**
- 永続的な **Fabric 管理者** 権限を持つユーザー アカウント または、Azure Key Vault とともに SPN (サービス プリンシパル) を使用
詳細については、FUAMの認証と認証の記事をお読みください。

https://github.com/microsoft/fabric-toolbox/blob/main/monitoring/fabric-unified-admin-monitoring/media/documentation/FUAM_Authorization.md

- FUAM をデプロイするユーザー アカウントに対して、次の**テナント設定**を有効化
    - **ユーザーは Fabric アイテムを作成できます**
    - **XMLA エンドポイントとオンプレミスのセマンティック モデルによる "Excel で分析" の許可**

https://learn.microsoft.com/ja-jp/fabric/admin/fabric-switch
    
https://learn.microsoft.com/ja-jp/fabric/admin/service-admin-portal-integration#allow-xmla-endpoints-and-analyze-in-excel-with-on-premises-datasets

- Fabric Capacity Metrics アプリ (ワークスペース) と P または F 容量がアタッチされ、XMLA エンドポイントが有効 (少なくとも 'Read')
- (任意)：テナント上の Azure Key Vault にアクセスする機能

:::note warn
FUAM を設定してデータを**完全に**取得するには、**Fabric 管理者**であることに加え、**すべてのワークスペースに対する管理者権限**が必要です。これはベースとなるモニタリングの機能において必要となるためです。**ワークスペースの管理者権限は、Fabric 管理者が持っているとは限らない**ので、ご注意ください。
逆に言うと、**管理者権限のないワークスペース内のセマンティック モデルに関する情報は、取得できません**。
:::

## FUAM の設定方法
こちらのページを見ながら設定すればいいのですが、躓きポイントについて補足したいと思います。

https://github.com/microsoft/fabric-toolbox/blob/main/monitoring/fabric-unified-admin-monitoring/how-to/How_to_deploy_FUAM.md

以下の見出しにある「2.1」などは、上記サイト内の章番号です。

### 2.1 サービス プリンシパルの作成と権限付与
1. サービス プリンシパルは Entra ID で作成します。
    1. Azure Portal で Microsoft Entra ID を開き、[管理] → [**アプリの登録**] → [**+ 新規登録**] と進んで作成します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/79d9a29d-917f-4e27-bf21-3f36bf396c2f.png)

    1. 作成したサービス プリンシパルは Entra ID の [アプリの登録] → [**すべてのアプリケーション**] に出てくるので、クリックします。左側のメニューから [**証明書とシークレット**] → [**クライアント シークレット**] → [**+ 新しいクライアント シークレット**] とクリックして、クライアント シークレットを追加します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/8e42b23e-a690-4077-b914-8aceab043c40.png)
    **この時表示される「値」は、作成時のみ確認可能なので、必ず控えておきます**。後の手順で使用します。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/58988479-c6fa-4199-9da8-5ded0b0080b0.png)

    ::: note alert
    この時表示される「値」は、**作成時のみ確認可能**なので、必ず控えておきます。(大切なことなので2回書きました)
    

1. **サービス プリンシパルに Fabric の API の権限を直接付与できない**ため、次の手順を踏みます。
    1. Entra ID で**セキュリティ グループを作成し、サービス プリンシパルをメンバーに追加**
    1. Fabric のテナント設定で、その**セキュリティ グループに対して API を有効化**
    有効化するのは次の2つのテナント設定です。テナント設定画面**右上の検索ボックスで「API」と入力**するとすぐにアクセスできます。
        - サービス プリンシパルは Fabric API を使用できます
        - サービス プリンシパルは読み取り専用管理 API にアクセスできます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/74b7cde8-4284-4212-90e3-c5caa9f0fe2b.png)

### 4 接続に資格情報を追加
ノートブックを実行すると「接続」が2つ作成されるので、[接続とゲートウェイの管理](https://app.powerbi.com/groups/me/gateways?referrer=app.powerbi.com&experience=power-bi) 画面で資格情報を編集します。
- fuam pbi-service-api admin
- fuam fabric-service-api admin

設定すべき各値の取得方法は以下の通りです。
- **Teanant ID** は、Fabric 画面で [？] → [Power BI について] or [Fabric について] で表示されるダイアログの **[テナントの URL] の「?ctid=」以降の値** です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/2bfbc0cb-26cb-4c94-8ca5-9ab4e6e256ef.png)

- **Service principal ID** は、サービス プリンシパルの **アプリケーション (クライアント) ID**
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/15a68b08-a890-498e-a7c6-93343c9e4080.png)

- **Service principal key は、クライアント シークレットの作成時に控えておいたクライアント シークレットの「値」** です。
なお、後から見ると下図のように、**値は表示されません**。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/e3d3eefa-38ec-4692-940c-5aa175eaeec7.png)

### 5 Capacity Metrics アプリを構成
新しい Capacity Metrics アプリの作成が推奨されています。既に使用している場合は、こちらのページで [Get it now] をクリックすることで、新しいワークスペースを作って構成することができます。

https://appsource.microsoft.com/en-us/product/power-bi/pbi_pcmm.microsoftpremiumfabricpreviewreport

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/aed2317e-404d-4f17-92a3-8177fa8ffa66.png)

::: note warn
[インストール] を押して終わりではなく、**テナントIDを入力してセットアップを完了するのをお忘れなく！** 忘れると次の手順で「Load_Capacities」というアクティビティが失敗します。レポートも開いて、きちんとデータが入っていることを確認しておきましょう。その際は **Capacity name のプルダウン メニューを選択しないと、データが表示されない**ので注意です。
:::

### 6 オーケストレーション パイプラインの実行
Load_FUAM_Data_E2E のパイプラインの中には複数のパイプラインが含まれています。そのうちの「Load_Activities」でエラーになる場合は、パラメーター「activity_days_in_scope」の値を「28」に設定して実行します。(再実行時には追加ではなくアップデートしてくれるので、心配はいりません。)
ちなみに、エラーになってあれこれしているうちにパイプラインを編集してしまったりして**元に戻したいときには、Deploy_FUAM というノートブックを実行すれば大丈夫**です。
利用状況によると思いますが、Load_Activities と Load_Capacity_Metrics という2つのアクティビティは結構時間がかかります。デモ用のテナントではこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/01401d1f-6caa-448f-ade3-f69b72558d7d.png)

### 7 FUAM レポートの準備
**FUAM_Core_SM** と **FUAM_Item_SM** という2つのセマンティック モデルを更新するのですが、レイクハウスに列が見つからないというエラーが出ました。Remarks セクションにも記載があるのですが、API が未対応の項目も含まれているのが原因のようです。
**Init_FUAM_Lakehouse_Tables** というノートブックによって足りていないカラムを作ることができるので、このノートブックを実行します。
実行後、セマンティック モデルのメニューから [データ モデルを開く] で、右上の [表示中 ∨] をクリックして [編集] を選択し、[テーブルの編集] → [確認] とします。セマンティック モデルの変更は自動的に保存されるので、これだけでOKです。
再度セマンティック モデルを更新してみてください。

セットアップが成功すると、FUAM_Core_Report などのレポートが確認できます。

### 8 スケジュール設定
毎日データをロードするようにスケジュールを設定します。この時ロードするデータを2日間に限定するよう推奨されています。初回実行時には14日とか28日分をロードしていますが、毎日スケジュール実行するので、直近2日分だけを上書き更新するようにするということです。

## まとめ
長くなったのでレポートの話は別記事にします。