Azure Resource Graph を Log Analytics にエクスポートできるという記載を見つけたので試してみました
変更のクエリを実行できる期間は 14 日間です。 保持期間を長くするには、Resource Graph クエリを Azure Logic Apps と統合し、クエリ結果を Log Analytics などの Azure データ ストアに手動でエクスポートし、必要な期間保持できます。
Azure リソースへの変更を分析する - Azure Resource Graph | Microsoft Learn
Azure Resource Graph とは
Azure の構成情報を保持しているサービスです
Azure Resource Graph に対して検索を実施すると、リソース数、リソースの状態 (VM が起動しているとか) などなどを一括検索することができます
ただし、Azure Resource Graph は現在の状態を情報として保持しています
変更分析など、一部の機能では過去の状態も情報として保持していますが、14日間だけです
今回はその制限を克服するため Log Analytics にエクスポートをしてみました
ざっくり手順
- Logic Apps の作成
- Logic Apps のマネージド ID の有効化
- Logic Apps の構成 | Resource Graph の検索
- Logic Apps の構成 | Log Analytics へインポート
- Logic Apps の構成 | データの整形
シナリオとして「仮想マシンの電源状態」を扱ってみます
1. Logic Apps の作成
プランの種類は [消費] でサクッと作成

2. Logic Apps のマネージド ID の有効化
Rsource Graph の検索をするためには適切な権限が必要です
権限を持っていないリソースの状態を検索することはできません
権限を割り当てるためにマネージド ID を有効化します

有効化したマネージド ID に対して権限を与えます
今回は サブスクリプション全体に閲覧権限を与えました

3. Logic Apps の構成 | Resource Graph の検索
チュートリアル: ロジック アプリ内で Resource Graph クエリの実行を自動化する - Azure Resource Graph | Microsoft Learn を参考にコードビューに以下の JSON を貼り付けます
※公開情報のままだと 1440分 (1日) に1回の実行で、検証に向いていないため 60分に1回の実行に変更しました
|
|

以下の内容が含まれています
トリガー:60分に一度の定期実行
アクション:以下のクエリを Resource Graph で実行
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend vmPowerState = tostring(properties.extended.instanceView.powerState.code)
| summarize count() by vmPowerState
この時点で、一度テスト実行してみます

無事に成功し、起動中 (running) が1台。割り当て解除 (deallocated) が1台あることがわかりました

当たり前ですが、実際の環境と一致しています

4. Logic Apps の構成 | Log Analytics へインポート
取得したデータを Log Analytics へインポートしてみます
Azure Log Analytics Data Collector - Connectors | Microsoft Learn というコネクタを使ってみます

事前に作成しておいた Log Analytics ワークスペースの ID と キーを入力します

コネクタを通して送るデータには画像の通り [HTTP 2] の結果の body を入れてみます
テーブル名は適当に vmPowerState
決めました
※実際は _CL が付いたテーブル名が作成されます

保存してテスト実行してみます
少し待つと Log Analytics ワークスペースにログが保存できています
スクリーンショットを確認見ると、不要なデータも保存されており使いずらい状況です
そこで Logic Apps のフローを変更し、綺麗にログが格納されるように工夫してみます

5. Logic Apps の構成 | データの整形
Log Analytics に格納したいデータは [HTTP 2] の結果の body のうち、data の部分だけでした。
そのため、スクリーンショットのように body('HTTP_2')['data']
と変更をしてみます
ややこしいのでテーブル名も vmPowerState01
に変更しておきます

再度、保存してテスト実行してみます
すると無事に必要なデータだけ Log Analytics ワークスペースにとりこむことができました
まとめ
Azure Resource Graph のクエリ結果を Log Analytics ワークスペースに取り込むことができました
過去のリソースの状態を保持するには非常に良い方法なんじゃないかなと思います
利用するコネクタを変更することでストレージアカウントに保存することもできます