Application Insights で .NET/.NET Core および Python のトレース ログを調べる

ASP.NET または ASP.NET Core アプリケーションの診断トレース ログを ILogger、NLog、log4Net、または System.Diagnostics.Trace から Azure Application Insights に送信します。 Python アプリケーションの場合は、Azure Monitor 用の OpenCensus Python の AzureLogHandler を使用して、診断トレース ログを送信します。 その後、探索して検索できます。 これらのログは、アプリケーションの他のログ ファイルとマージされます。 これらを使うと、各ユーザー要求に関連付けられているトレースを識別し、他のイベントや例外レポートと関連付けることができます。

Note

ログ キャプチャ モジュールは必要ですか。 これは、サード パーティ製のロガーの場合に便利なアダプターです。 しかし、NLog、log4Net、または System.Diagnostics.Trace をまだ使用していない場合は、Application Insights TrackTrace() を直接呼び出すことを検討してください。

Note

インストルメンテーション キーのインジェストのサポートは、2025 年 3 月 31 日に終了します。 インストルメンテーション キーのインジェストは引き続き機能しますが、この機能の更新プログラムやサポートは提供されなくなります。 接続文字列に移行することで、新機能をご利用いただけます。

アプリにログ記録フレームワークをインストールする

プロジェクトで選択したログ記録フレームワークをインストールします。これにより、app.config または web.config にエントリが追加されます。

 <configuration>
  <system.diagnostics>
    <trace>
      <listeners>
        <add name="myAppInsightsListener" type="Microsoft.ApplicationInsights.TraceListener.ApplicationInsightsTraceListener, Microsoft.ApplicationInsights.TraceListener" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

ログを収集するよう Application Insights を構成する

ログ コレクターを含めるオプションがある場合は、Application Insights をプロジェクトに追加します (まだしていない場合)。

または、ソリューション エクスプローラーでプロジェクトを右クリックし、Application Insights を構成します。 [トレース コレクションの構成] オプションを選択します。

Note

Application Insights のメニューやログ コレクターのオプションが表示されない場合は、 トラブルシューティングをお試しください。

手動のインストール

プロジェクトの種類が Application Insights インストーラーでサポートされていない場合は、この方法を使ってください。 たとえば、Windows デスクトップ プロジェクトの場合です。

  1. log4net または NLog を使う場合は、プロジェクト内でインストールします。

  2. ソリューション エクスプローラーで、プロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。

  3. Application Insights を検索します。

  4. 次のいずれかのパッケージを選択します。

NuGet パッケージでは、必要なアセンブリがインストールされ、必要に応じて web.config または app.config が変更されます。

ILogger

コンソール アプリケーションと ASP.NET Core で Application Insights ILogger の実装を使用する例については、「ApplicationInsightsLoggerProvider for .NET Core の ILogger ログ」を参照してください。

診断ログの呼び出しを挿入する

System.Diagnostics.Trace を使用する場合、通常の呼び出しは次のようになります。

System.Diagnostics.Trace.TraceWarning("Slow response - database01");

log4net または NLog を使う場合は、以下を使用します。

    logger.Warn("Slow response - database01");

EventSource イベントを使用する

Application Insights にトレースとして送信する System.Diagnostics.Tracing.EventSource イベントを構成できます。 まず、Microsoft.ApplicationInsights.EventSourceListener NuGet パッケージをインストールします。 次に、ApplicationInsights.config ファイルの TelemetryModules セクションを編集します。

    <Add Type="Microsoft.ApplicationInsights.EventSourceListener.EventSourceTelemetryModule, Microsoft.ApplicationInsights.EventSourceListener">
      <Sources>
        <Add Name="MyCompany" Level="Verbose" />
      </Sources>
    </Add>

ソースごとに、次のパラメーターを設定できます。

  • Name では、収集する EventSource の名前を指定します。
  • Level では、収集するログ レベルを指定します。CriticalErrorInformationalLogAlwaysVerboseWarning があります。
  • Keywords (省略可能) では、使用するキーワードの組み合わせの整数値を指定します。

DiagnosticSource イベントを使用する

Application Insights にトレースとして送信する System.Diagnostics.DiagnosticSource イベントを構成できます。 まず、Microsoft.ApplicationInsights.DiagnosticSourceListener NuGet パッケージをインストールします。 次に、ApplicationInsights.config ファイルの "TelemetryModules" セクションを編集します。

    <Add Type="Microsoft.ApplicationInsights.DiagnosticSourceListener.DiagnosticSourceTelemetryModule, Microsoft.ApplicationInsights.DiagnosticSourceListener">
      <Sources>
        <Add Name="MyDiagnosticSourceName" />
      </Sources>
    </Add>

トレースする診断ソースごとに、診断ソースの名前に設定された Name 属性を持つエントリを追加します。

ETW イベントを使用する

Application Insights にトレースとして送信される Event Tracing for Windows (ETW) イベントを構成できます。 まず、Microsoft.ApplicationInsights.EtwCollector NuGet パッケージをインストールします。 次に、ApplicationInsights.config ファイルの "TelemetryModules" セクションを編集します。

Note

ETW イベントを収集できるのは、SDK をホストするプロセスが、Performance Log Users または Administrators のメンバーである ID で実行されている場合だけです。

    <Add Type="Microsoft.ApplicationInsights.EtwCollector.EtwCollectorTelemetryModule, Microsoft.ApplicationInsights.EtwCollector">
      <Sources>
        <Add ProviderName="MyCompanyEventSourceName" Level="Verbose" />
      </Sources>
    </Add>

ソースごとに、次のパラメーターを設定できます。

  • ProviderName は、収集する ETW プロバイダーの名前です。
  • ProviderGuid では、収集する ETW プロバイダーの GUID を指定します。 ProviderName の代わりに使用できます。
  • Level では、収集するログ レベルを設定します。 CriticalErrorInformationalLogAlwaysVerbose、または Warning にすることができます。
  • Keywords (省略可能) では、使用するキーワードの組み合わせの整数値を設定します。

トレース API を直接使用する

Application Insights トレース API を直接呼び出すことができます。 ログ記録のアダプターはこの API を使用します。

次に例を示します。

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow response - database01");

TrackTrace の利点は、比較的長いデータをメッセージの中に配置できることです。 たとえば、メッセージ中で POST データをエンコードできます。

メッセージに重大度レベルを追加することもできます。 また、他のテレメトリと同様、プロパティ値を追加することで、さまざまなトレース セットをフィルター処理したり、検索したりすることができます。 次に例を示します。

TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Slow database response",
                            SeverityLevel.Warning,
                            new Dictionary<string, string> { { "database", "db.ID" } });

これで、特定のデータベースに関連し、特定の重大度レベルを持つすべてのメッセージを [Transaction Search] (トランザクション検索) で簡単に抽出できるようになります。

OpenCensus Python の AzureLogHandler

Azure Monitor ログ ハンドラーを使用すると、Python ログを Azure Monitor にエクスポートできます。

Azure Monitor 用の OpenCensus Python SDK を使用してアプリケーションをインストルメント化します。

この例では、警告レベルのログを Azure Monitor に送信する方法を示します。

import logging

from opencensus.ext.azure.log_exporter import AzureLogHandler

logger = logging.getLogger(__name__)
logger.addHandler(AzureLogHandler(connection_string='InstrumentationKey=<your-instrumentation_key-here>'))
logger.warning('Hello, World!')

ログを調査する

アプリをデバッグ モードで実行するか、ライブでデプロイします。

Application Insights ポータルにあるアプリの概要ペインで、[Transaction Search] (トランザクション検索) を選択します。

たとえば、次の操作ができます。

  • ログ トレースまたは特定のプロパティを持つ項目をフィルター処理する。
  • 特定の項目の詳細に調べる
  • 同じユーザー要求に関連する (操作 ID が同じ) 他のシステム ログ データを探す。
  • ページの構成をお気に入りとして保存する。

Note

アプリケーションで大量のデータが送信され、Application Insights SDK for ASP.NET バージョン 2.0.0-beta3 以降を使用している場合は、"アダプティブ サンプリング" 機能が動作して、テレメトリの一部のみが送信される可能性があります。 詳細については、サンプリングに関する記事を参照してください。

トラブルシューティング

よく寄せられる質問に対する回答を確認します。

テレメトリの遅延、ネットワークの過負荷、非効率的な送信の原因は何ですか?

System.Diagnostics.Tracing には Autoflush 機能があります。 この機能により、SDK によってすべてのテレメトリ項目がフラッシュされ (これは望ましくありません)、テレメトリの遅延、ネットワークの過負荷、非効率的な転送というログ アダプターの問題が発生する可能性があります。

Java の場合はどうすればよいですか。

Java コード不要のインストルメンテーション (推奨) では、既定でログが収集されます。 Java 3.0 エージェントを使ってください。

Application Insights Java エージェントは、Log4j、Logback、java.util.logging からログを収集します。追加設定は不要です。

プロジェクトのコンテキスト メニューに Application Insights のオプションがないのはなぜですか?

  • 開発用マシンに Developer Analytics Tools がインストールしてあることを確認します。 Visual Studio の [ツール]>[拡張機能と更新プログラム] で、Developer Analytics Tools を探します。 [インストール済み] タブにない場合は、 [オンライン] タブを開いてインストールします。
  • これは、Developer Analytics Tools でサポートされていない種類のプロジェクトである可能性があります。 手動でインストールしてください。

構成ツールにログ アダプターのオプションがないのはなぜですか?

  • まず、ログ記録フレームワークをインストールします。
  • System.Diagnostics.Trace を使用している場合は、web.config で構成済みであることを確認します。
  • 最新バージョンの Application Insights があることを確認します。 Visual Studio で [ツール]>[拡張機能と更新プログラム] に移動し、[更新] タブを開きます。そこに Developer Analytics Tools がある場合は、それを選んで更新します。

"インストルメンテーション キーは空にできません" というエラーメッセージが表示されるのはなぜですか?

Application Insights をインストールしないでログ アダプターの NuGet パッケージをインストールした可能性があります。 ソリューション エクスプローラーで、ApplicationInsights.config を右クリックし、 [Application Insights の更新] を選択します。 Azure にサインインし、Application Insights リソースを作成するか、既存のものを再利用することを求めるメッセージが表示されます。 これで問題は修正されます。

すべてのイベントと要求がパイプラインを通過するまでしばらく時間がかかることがあります。

保持されるデータの量はどのくらいですか

いくつかの要因が、保持されるデータの量に影響します。 詳細については、顧客イベント メトリック ページの「制限」セクションを参照してください。

想定していたログ エントリの一部が表示されないのはなぜですか?

アプリケーションから大量のデータを送信され、Application Insights SDK for ASP.NET バージョン 2.0.0-beta3 以降を使っている可能性があります。 この場合、アダプティブ サンプリング機能が動作し、テレメトリの一部のみが送信されることがあります。 詳細については、サンプリングに関する記事を参照してください。

次のステップ