しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Application Insights を利用した Durable Functions の診断を試してみた

仕事でも Durable Functions を使っていますが、一般的な HttpTrigger などと異なり Durable Functions は実行される仕組みが特殊なので、Azure Functions のログだけでは分かりにくいことが多いです。

なので、とりあえず Application Insights は有効にしておきましょう。非常に便利で捗ります。

Azure Functions の作成時に Application Insights を有効に出来るので、最初から作っておくのが楽です。後からでも追加できますが、手動で Application Insights のキーを設定しないといけない場合があります。

とりあえず動かして理解するのがモットーなので、テンプレートで作られる Durable Functions をデプロイし、数回実行して Application Insights にデータを流し込みました。

f:id:shiba-yan:20180204222929p:plain

この辺りは普通の Azure Functions と同じですが、Function1 の呼び出し回数が多いことに注意。オーケストレーターはリプレイされるので、アクティビティよりも多く実行されています。

リクエストに紐づいている処理は Application Insights から "All traces for this operation" を選べば、実行 ID 単位で検索してくれるのでこれもまた捗ります。Azure Functions に限らず、Web Apps でもセッション・ユーザー単位で簡単に検索できるので便利です。

f:id:shiba-yan:20180204223010p:plain

ちゃんとロガーで書き出したメッセージも Application Insights から確認できます。

次はアクティビティで落ちるように仕込んだものをデプロイして、再度実行してみました。Application Insights の Failures を選ぶと一目でエラーが発生したアクティビティが確認出来ました。

f:id:shiba-yan:20180204223319p:plain

失敗したリクエストを辿っていくと、ちゃんとコールスタックの確認まで出来ます。

f:id:shiba-yan:20180204223250p:plain

この辺りまで確認できればエラーの原因を特定して、修正することが出来ると思います。昔に比べると Application Insights はかなり使いやすくなったと思う瞬間でした。

最後にドキュメントに書いてあった AIQL を使って実行履歴を取得するコードを試しました。インスタンス ID と開始した大体の時間を設定して、Analytics からクエリを実行します。

f:id:shiba-yan:20180204222937p:plain

出力されるログが非常にわかりやすいので、どのような仕組みで Durable Functions が実行されているのか一目で把握することが出来ます。

全てのログは Table Storage にも残っているので、AIQL で詳しく引いてから Table Storage を調べるという方法が効率良さそうです。