LoginSignup
0
0

Azure Functionの分離ワーカープロセスでApplication Insightにログが出力されない

Posted at

なんかB票みたいなタイトルになったけど、まーハマったから残します。

【現象】
Azure Functionの修正が必要だったので、ついでに、インプロセスから分離ワーカープロセスに移行した際に、Application Insightにログが出なくなりました。(正確にはInformationログが出なくなった)

【原因】
次の2つ
a) ログ出力レベル(LogLevel)がWarningになっていた。
b) Application Insightへのログ出力サンプリングが有効になっていた。

【対応内容】
上記a)に関しては、下記のリンクⅰ)のApplication Insightの項に書いてありました。

既定では、Application Insights SDK は、警告とそれより深刻なログのみをキャプチャするようにロガーに指示するログ フィルターを追加します。 この動作を無効にする場合は、サービス構成の一部としてフィルター規則を削除します。

上記b)がなかなか見つかりませんでした。
リンクのⅲ)→ⅰ)→ⅳ)とたどっていってやっと見つかりました。
「サンプリング」の項に次のようにあります。

ワーカー サービス向け Application Insights SDK では、固定レートのサンプリングとアダプティブ サンプリングの両方がサポートされます。 アダプティブ サンプリングは、既定で有効になっています。 サンプリングは、ApplicationInsightsServiceOptions の EnableAdaptiveSampling オプションを使用して無効にすることができます。

「ApplicationInsightsServiceOptions を使用する」の項にEnableAdaptiveSampling オプションの設定方法はありましたけど、固定レートのサンプリング設定が見当たりませんでした。

ただ、リンクⅰ)のある項のサンプルコードのコメントにしれっと次の記載がありました。

// The Application Insights SDK adds a default logging filter that instructs ILogger to capture only Warning and more severe logs. Application Insights requires an explicit override.
// Log levels can also be configured using appsettings.json. For more information, see https://learn.microsoft.com/en-us/azure/azure-monitor/app/worker-service#ilogger-logs

確かにⅳ)の「ILogger ログ」の項に設定のサンプルがありますが、host.jsonなのかappsettings.jsonなのか記載がありません。インプロセスはプロセス1つだからhostの設定に従い、分離ワーカーは別プロセスだからapplication単位の設定に従う、ということなのでしょうが、ちょっと見つけづらかったです。

【リンク】
ⅰ)分離ワーカー プロセスにおける C# Azure Functions の実行のガイド
ⅱ)分離ワーカー モデルとインプロセス モデル .NET Azure Functions との違い
ⅲ).NET アプリをインプロセス モデルから分離ワーカー モデルに移行する
ⅳ)ワーカー サービス アプリケーション (非 HTTP アプリケーション) 向け Application Insights

(来年11月に.NET6がサポート終了しますが、そうするとインプロセスも自動的にサポート終了ですかね?ちょっと大変かもしれません。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0