miso_soup3 Blog

主に ASP.NET 関連について書いています。

Azure Functions (C#) でのログ Tips メモ

Azure Functions (C#) でのログ Tips で、調べたことをメモしておく。 考慮漏れとして、ホスティングプランの違いにより、記載内容の挙動に違いがあるかもしれない。

概要: Azure Functions を監視する | Microsoft Docs

デフォルトの挙動

デフォルトで用意されているログの方法では、以下の場所からログを確認できる。

構造化ログを使う場合は、後述の ILogger(Microsoft.Extensions.Logging 名前空間) を使用することで、Application Insights 上で構造化ログとして参照することができる。クエリも可能。ただし、この ILogger を使用した場合、以下の現象を確認している(現在)。

  • ログの内容が、デバッグで使用する Azure Functions CLI には出力されない ※1
  • ログの内容が、Azure Portal 上ののモニターからは確認できない
  • ログの内容が、Azure Table Storage に出力されない
  • App Service の診断ログには出力される

ILogger の使い方: プレースホルダーと C# の文字列挿入 の違いに注意すること。次の 2 つめのドキュメントを必ず参照する。

Azure Table Storage にログを格納する場合、一回の実行で出力されたログが全て、Table Entity の 1つの Property に格納される。つまり、ログのサイズが Azure Table Storage で定義されているサイズを超える場合、すべてのログが出力されるとは限らない。Azure Table Storage の1行の Max Sizeは、1MB、1 Property の Max Size は、64KB である(以下のドキュメントによる)。

実際に64KBを超えるメッセージをログとして出力してみたのだが、Azure Table Storage には、メッセージがカットされ末尾に「…」が追加されていた。

以上の挙動などにより、要件に合わない場合は、他サービスのロギングを使用する必要がある。

ログの期限

ログの参照

例えば、実行時に割り振られるユニークId—InvocationId を参照することにより、ある Function のある 実行ログを参照する、といったことができる。

InvocationId の取得方法はこちらのサイトを参照: Azure Functions で実行時のIDを取得する | ブチザッキ 情報の取得について: Retrieving information about the currently running function · Azure/azure-webjobs-sdk-script Wiki

この InvocationId は、Application Insightsや、Table Storage の RowKey 等に格納される。

Application Insights REST API を使う

Application Insights REST API で、HTTP で ログ(traces)を取得することができる。ただし今は Public Preview である。changelog: Azure Application Insights Developers Guide

Azure Application Insights Developers Guide このサイトの「Try it now」から、ブラウザ上で API のリクエストやレスポンスを確認できる。 試すときに、Application Insights の「Application ID」「API Key」が必要である。この取得方法はこちら:Azure Application Insights Developers Guide 今だと、Azure Portal から Application Insights を開き「API Access」から確認できる。 リクエストの中に書く Query は、Log Analytics のクエリ言語である:Analytics - Azure Application Insights の強力な検索ツール | Microsoft Docs

参照サイト

TraceWriter