Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

LogicApps で追跡対象プロパティを利用して Log に任意のデータを出力する方法

LogicApps のデバッグって結構面倒ですよね。

四六時中実行しているようなフローを作成すると、時々どんな処理を得ているのか、外部からどんなデータを取得して、実行結果がどうなったのかをもう少しうまく把握したいシチュエーションがあります。

でも、LogicAppsの実行結果って成功か失敗かしか判別できず、細かな詳細を見たいときは一つ一つ実行結果を開いて確認する必要があるんですよね。

f:id:sugimomoto:20210108225035p:plain

これがAzure Functionsとかなら、Azure Monitor(Log Analytics)にでもデータを出力するのに! と考えていたら、

そこで最近知った良い方法が 以下のLogicApps でのログ出力で追跡対象プロパティを設定するというものです。

https://docs.microsoft.com/ja-jp/azure/logic-apps/monitor-logic-apps-log-analytics#view-logic-app-runs-status

これを使うことで、各アクションの実行結果もしくは入力データや固定メッセージをLog Analyticsに出力して、結果を分析しやすくなります。

前提条件

この機能は予めLogicApps をLog Analyticsワークスペースと紐付けて置く必要があります。

f:id:sugimomoto:20210108225042p:plain

以下のWorkflowRuntimeを設定しておきましょう。

f:id:sugimomoto:20210108225050p:plain

追跡対象プロパティの設定方法

追跡対象プロパティは各アクションの「設定」から登録します。

f:id:sugimomoto:20210108225055p:plain

以下の部分ですね。

f:id:sugimomoto:20210108225101p:plain

追跡対象プロパティは大きく分けて2つの設定方法があります。

一つは単純に固定メッセージを常に出力する方法です。

左側にProperty名、右側に出力メッセージを指定します。

f:id:sugimomoto:20210108225110p:plain

もう一つは各関数を利用して動的に出力する方法です。

docs.microsoft.com

例えば対象のアクションに設定された値や出力結果の値をログに出力したい場合は「@action()」で取得できます。

「@action()」以降は入力(Inputs)と出力(Outputs)の2つのオブジェクトに別れて、

f:id:sugimomoto:20210108225117p:plain

その後、それぞれのオブジェクト(未加工出力の表示)のデータにアクセスできるようになります。

f:id:sugimomoto:20210108225124p:plain

例えば、上記のHTTPアクションの出力結果のステータスコードを追跡対象プロパティとしてログに吐き出したい場合は

「@action()['outputs']['statusCode']」になりますし

「@action()['outputs']['body']['args']['foo1']」といった形でレスポンスボディにアクセスすることも可能です。

f:id:sugimomoto:20210108225132p:plain

出力結果の確認方法

出力結果はログの「AzureDiagnostics」から確認できます。

f:id:sugimomoto:20210108225139p:plain

デフォルトでは項目が表示されないので「trackedProperties_XXXXX」で出力したプロパティ名を指定します。

f:id:sugimomoto:20210108225149p:plain

項目を表示すると、以下のように結果が出力されていることが確認できます。

f:id:sugimomoto:20210108225212p:plain