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 を使用して、診断トレース ログを送信します。 その後、探索して検索できます。 これらのログはアプリケーションからの他のログ ファイルと結合されます。したがって、各ユーザー要求に関連付けられているトレースを特定し、それらを他のイベントや例外レポートに関連付けることができます。

注意

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

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

プロジェクトで選択したログ記録フレームワークをインストールします。これにより、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 をプロジェクトに追加します (まだ追加していない場合)。 Log Collector を含めるオプションが表示されます。

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

注意

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>

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

ETW イベントを使用する

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

注意

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" } });

これにより、特定のデータベースに関連する、特定の重大度レベルのメッセージすべてを、[検索] で簡単に抽出できます。

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 ポータルにあるアプリの概要ウィンドウで、[検索] を選択します。

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

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

注意

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

トラブルシューティング

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

Java コード不要のインストルメンテーション (推奨) では、ログがすぐに収集され、Java 3.0 エージェントを使用します。

Java SDK を使用している場合は、Java ログ アダプターを使用します。

プロジェクトのコンテキスト メニューに 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 以降を使用している場合は、アダプティブ サンプリング機能が動作して、テレメトリの一部のみが送信される可能性があります。 サンプリングの詳細については、こちらを参照してください。

次のステップ