🦁

Application Insights でデバッグログを出す方法

に公開

はじめに

あんまりないと思いますが、.NET のアプリケーションで Application Insights を使っていてデバッグログを出したくなることがあると思います。ここではその方法について説明します。

例えば、クラウド環境でしか再現しない問題があって、その調査のために詳細なログを取りたい場合などです。

Application Insights SDK の場合

最近、OpenTelemetry Distro が推奨されていますが、まだ Application Insights SDK を使っている場合もあると思います。その場合は以下のように設定します。やり方は簡単で Application Insights がデフォルトで警告以上のログをとるように設定されている部分を上書きするだけです。

例えば appsettings.json に以下のように設定を追加します。

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Debug"
      }
    }
  }
}

もしくは以下のような環境変数を設定します。

Logging__ApplicationInsights__LogLevel__Default=Debug

環境変数の方がアプリケーションの再デプロイがいらないので便利だと思います。
こうすることでデバッグレベルのログが Application Insights に送信されるようになります。

OpenTelemetry Distro の場合

最近は Application Insights SDK ではなく OpenTelemetry Distro を使うことが推奨されています。その場合も同様に設定を追加します。OpenTelemetry Distro がデフォルトで警告以上のログをとるように設定されている部分を上書きするだけです。

例えば appsettings.json に以下のように設定を追加します。

{
  "Logging": {
    "OpenTelemetry": {
      "LogLevel": {
        "Default": "Debug"
      }
    }
  }
}

もしくは以下のような環境変数を設定します。

Logging__OpenTelemetry__LogLevel__Default=Debug

注意点

デバッグレベルのログは大量に出力される可能性があるため、必要なときだけ有効にすることをお勧めします。常に有効にしておくと、ログの量が増えすぎてコストがかかる場合があります。
また、サンプリングが行われるようになっていると再現時のログが取得されない可能性があるため、必要に応じてサンプリング設定も確認してください。

Application Insights SDK の場合は以下のようにしてデフォルトのアダプティブサンプリングをオフにできます。

services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    EnableAdaptiveSampling = false,
});

OpenTelemetry Distro の場合は以下のように構成します。

builder.Services.AddOpenTelemetry().UseAzureMonitor(options =>
{
    options.SamplingRatio = 1.0f;
});

参考ドキュメント

Microsoft (有志)

Discussion