Azure Functions のパフォーマンスデータをLogic Appsでエクスポートする
Azure Monitor を使って Microsoft Azure の Azure Functions から パフォーマンスログを収集し、ロジックアプリで Azure Blob Storageにエクスポートします。
Azure リソースを作成するとすぐに、Azure Monitor が有効にされ、メトリックとアクティビティのログの収集が開始されます。Azure Monitor データ プラットフォームは、Azure Monitor メトリックと Azure Monitor ログで構成され、Azure Monitor ログは、ログとパフォーマンス データを収集します。
1.ログを収集する
チュートリアルを参考に、ログを収集する設定をします。
Log Analytics ワークスペースを作成する
Azure Monitor 内のログ データは、Log Analytics ワークスペースに保持されるので、まずLog Analytics ワークスペースを作成します。
- Azure portal の [すべてのサービス] から、 [Log Analytics ワークスペース] を選択します(すべてのサービス→分析→Log Analytics ワークスペース)
- [作成] をクリックして、新しいワークスペースを作成します
- [基本] タブで、ワークスペースの [サブスクリプション] 、 [リソース グループ] 、および [リージョン] を選択します
- これらは監視対象のリソースと同じである必要はありません
- [確認および作成] をクリックしてワークスペースを作成します
診断設定の作成
診断設定を作成し、対象リソースのリソース ログを送信する場所を Log Analytics ワークスペース に指定します。
- 監視対象とする Functions で、リソースのメニューの [監視] セクションから[診断設定] を選択して [診断設定を追加する] をクリックします
- 診断設定の名前を入力し、収集するカテゴリを選択します
- ここではすべてのログとメトリックを収集の対象にします
- 宛先は「Log Analytics ワークスペースへの送信」として、作成したLog Analytics ワークスペースを選択します
ログ クエリを使用してログを取得する
Log Analytics ワークスペースからKustoクエリ言語(KQL)でログを取得します。
最終的にはLogic Appsでデータをエクスポートしますが、そのためのクエリを Log Analytics ワークスペースで確認します。
チュートリアルのとおりに設定すれば、ログの収集まではすんなりとおこなえますが、どこにどんなログが書き込まれ、Kustoクエリでどうやって抽出するかは、公式のドキュメントを参考にしながら何度も手を動かして試してみる必要があると思います。
- 作成したLog Analytics ワークスペースを開きます
- リソースのメニューから [ログ] を選択します
事前構築済みのクエリが表示されます。事前構築済のものを読み込んで編集しても良いですが、ここでは新規にクエリを作成するためウィンドウを閉じます。
- 取得したいデータを抽出するためのクエリをクエリウィンドウを書いていきます
ここでは、Azure Functions固有のメトリックであるFunctionExecutionUnits
を、次のようなクエリで取得します。FunctionExecutionUnits
は、関数の実行単位である、実行時間とメモリ使用量を組み合わせた値です。
AzureMetrics
| where Resource == "PYTHON-EXCEL"
| where MetricName == "FunctionExecutionUnits"
| where TimeGenerated > ago(10d)
| extend localTimestamp = TimeGenerated + 9h
| project localTimestamp,Total,Average
| summarize Total = sum(Total),Average = avg(Average) by bin(localTimestamp,1h)
| order by localTimestamp desc
この場合、リソース「PYTHON-EXCEL」のメトリック「FunctionExecutionUnits」を10日分抽出し、1時間単位に丸めてTotal
の合計とAverage
の平均を表示します。タイムスタンプはJSTに変換しています。
今回は、次のようなデータを取ることができました。
*UTCと表示されていますが、JSTで表示されています。
同じ範囲を、Functionsのメトリックで表示すると、次のようになります。
対象リソースのメトリックや、公式のドキュメントを参考にしながらエクスポートしたいパフォーマンスデータを抽出するクエリを作成します。
2.ロジックアプリを作成する
Blob ストレージへの接続情報を記録しておく
ロジックアプリを作成する前に、ロジックアプリから Blob Storage にアクセスするための接続文字列を確認しておきます。
- エクスポート先となるストレージアカウントを選択します
- ストレージアカウント名 の値をコピーします
- メニューから「アクセスキー」を表示し ストレージアカウント名 の値と、key1 → キー の値をコピーします
ロジックアプリを作成する
チュートリアルを参考に、収集したログをエクスポートするロジックアプリを作成していきます。
- Azure portal の [すべてのサービス] から、 [ロジック アプリ] を選択します(すべてのサービス→統合→ロジック アプリ)
- [追加] をクリックして、新しいロジック アプリを作成します
- [基本] タブで、ロジックアプリの [サブスクリプション] 、 [リソース グループ] 、および [リージョン] を選択します
- ロジックアプリ自身のログを収集するには、[ログ分析を有効化] で [はい]を選択します
- ここでは[いいえ]を選択します
- 今回は [プランの種類] に [消費] を選択し、従量課金にします
- [確認および作成] 、 [作成] の順にクリックします
- デプロイが完了したら、 [リソースに移動] をクリックし、 [Logic Apps デザイナー] を開きます
Azure Monitor Logs アクションでエクスポートするアプリを作成する
- [一般的なトリガーで開始する] の下で、 [繰り返し] を選択します
- ここではひとまず、1日1回実行されるように設定しておきます
-
[+ 新しいステップ] をクリックして、繰り返しアクションの後に実行するアクションを追加します
-
[操作を選択してください] の下で「azure monitor」と入力して、 [Azure Monitor ログ] を選択します
-
アクションとして [クエリを実行して結果を一覧表示する] をクリックします
-
Azure Monitor ログへの接続するために、サインインします
- Log Analytics ワークスペースのサブスクリプションとリソース グループを選択します
- [クエリ] ウィンドウに先程作成した ログクエリ を追加します
- あとで変更するので、[時間の範囲] は、どれを選んでも構いません
- 一度、保存したあとは
Set in query
が選択できるようになります - クエリ内で
TimeGenerated > ago(10d)
としているので、過去10日が範囲になります
- 一度、保存したあとは
- [+ 新しいステップ] をクリックし、 [データ操作] → [作成] をクリックします
- [入力] ボックスをクリックして、前のアクティビティの値の一覧から [クエリを実行して結果を一覧表示する] アクションの [value] を選択します
-
[+ 新しいステップ] をクリックして、クエリの実行後のアクションを追加します
-
[操作を選択してください] の下で「blob」と入力して、 [BLOBを作成する] を選択します
- 初回のみ Blob ストレージへの接続を作成します
- 記録しておいた接続情報を入力し、接続を作成します
- 出力する Blob の情報を入力します
- BLOBコンテンツは、前のアクティビティの出力結果を選択します
- [実行] をクリックして、ワークフローをテストします
Blob ストレージにJSON形式のログファイルが出力されます。
まとめ
ロジックアプリ の全体像は、次のようになります。
本記事では、Azure Functions のパフォーマンスデータを ロジックアプリ を使い、JSON形式のファイルとして Blob ストレージにエクスポートする方法を紹介しました。
ログから収集したパフォーマンスデータをエクスポートしておくことで、アプリケーションのベースラインを分析するときなどに役立てることができます。
Discussion