.NET コンソール アプリケーション用の Application Insights

Application Insights を使うと、Web アプリケーションの可用性、パフォーマンス、利用状況を監視できます。

Microsoft Azure のサブスクリプションが必要になります。 Windows、Xbox Live、またはその他の Microsoft クラウド サービスの Microsoft アカウントでサインインします。 所属するチームが組織の Azure サブスクリプションを持っている場合は、自分の Microsoft アカウントを使用してサブスクリプションに追加してもらうよう所有者に依頼してください。

Note

コンソール アプリケーションについては、ここから新しい Microsoft.ApplicationInsights.WorkerService パッケージおよび関連付けられた手順を使用することを "強くお勧めします"。 このパッケージは、.NET Core および .NET Framework の長期サポート (LTS) バージョン以降と互換性があります。

Note

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

作業の開始

  • Azure Portal で、Application Insights のリソースを作成します
  • 接続文字列のコピーを取得します。 先ほど作成した新しいリソースの [要点] ドロップダウンで、接続文字列を探します。
  • 最新の Microsoft.ApplicationInsights パッケージをインストールします。
  • テレメトリを追跡する前にコードに接続文字列を設定します (または APPLICATIONINSIGHTS_CONNECTION_STRING 環境変数を設定します)。 その後、テレメトリを手動で追跡して、Azure Portal に表示します。
// you may use different options to create configuration as shown later in this article
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
configuration.ConnectionString = <Copy connection string from Application Insights Resource Overview>;
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Hello World!");

Note

テレメトリはすぐには送信されません。 テレメトリ項目はバッチ処理され、ApplicationInsights SDK によって送信されます。 Track() メソッドを呼び出した直後に終了するコンソール アプリでは、この記事で後述する完全な例に示すように、アプリが終了する前に Flush()Sleep/Delay が完了しない限り、テレメトリが送信されない場合があります。 InMemoryChannel を使用する場合、Sleep は必要ありません。 Sleep の必要性に関してはアクティブな問題があります。参照先:ApplicationInsights-dotnet/issues/407

  • Microsoft.ApplicationInsights.DependencyCollector パッケージの最新バージョンをインストールします。このパッケージにより、HTTP、SQL、またはその他の外部の依存関係呼び出しが自動的に追跡されます。

コードから、または ApplicationInsights.config ファイルを使用して、Application Insights を初期化し、構成できます。 初期化はできるだけ早期に実行するようにします。

Note

ApplicationInsights.config を参照している説明は、.NET Framework を対象とするアプリに対してのみ適用され、.NET Core アプリケーションには適用されません。

構成ファイルを使用する

.NET Framework ベースのアプリケーションでは、TelemetryConfiguration の作成中、Application Insights SDK によって、作業ディレクトリにある ApplicationInsights.config ファイルが既定で検索されます。 .NET Core では、構成ファイルの読み取りはサポートされていません。

TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present

構成ファイルのパスを指定することもできます。

using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);

詳細については、構成ファイル リファレンスに関するページをご覧ください。

Microsoft.ApplicationInsights.WindowsServer パッケージの最新バージョンをインストールすることにより、構成ファイルの完全な例を入手できます。 ここでは、このコード例と同等の依存関係コレクションの最小構成を示します。

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <ConnectionString>"Copy connection string from Application Insights Resource Overview"</ConnectionString>
  <TelemetryInitializers>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
  </TelemetryInitializers>
  <TelemetryModules>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
      <ExcludeComponentCorrelationHttpHeadersOnDomains>
        <Add>core.windows.net</Add>
        <Add>core.chinacloudapi.cn</Add>
        <Add>core.cloudapi.de</Add>
        <Add>core.usgovcloudapi.net</Add>
        <Add>localhost</Add>
        <Add>127.0.0.1</Add>
      </ExcludeComponentCorrelationHttpHeadersOnDomains>
      <IncludeDiagnosticSourceActivities>
        <Add>Microsoft.Azure.ServiceBus</Add>
        <Add>Microsoft.Azure.EventHubs</Add>
      </IncludeDiagnosticSourceActivities>
    </Add>
  </TelemetryModules>
  <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</ApplicationInsights>

コードからテレメトリ コレクションを構成する

Note

.NET Core では、構成ファイルの読み取りはサポートされていません。

  • アプリケーションの起動中に、DependencyTrackingTelemetryModule インスタンスを作成し、構成します。これはシングルトンにする必要があり、また、アプリケーションの有効期間中保持する必要があります。
var module = new DependencyTrackingTelemetryModule();

// prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
//...

// enable known dependency tracking, note that in future versions, we will extend this list. 
// please check default settings in https://github.com/Microsoft/ApplicationInsights-dotnet-server/blob/develop/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt

module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");
//....

// initialize the module
module.Initialize(configuration);
  • 共通のテレメトリ初期化子を追加します。
// ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls
configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());

プレーンな TelemetryConfiguration() コンストラクターを使用して構成を作成した場合は、さらに相関関係のサポートを有効にする必要があります。 ファイルから構成を読み取り、TelemetryConfiguration.CreateDefault() または TelemetryConfiguration.Active を使用した場合は、不要です

configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
  • こちらの説明に従って、パフォーマンス カウンター コレクター モジュールをインストールし、初期化することもできます

完全な例

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();

            configuration.ConnectionString = "removed";
            configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());

            var telemetryClient = new TelemetryClient(configuration);
            using (InitializeDependencyTracking(configuration))
            {
                // run app...

                telemetryClient.TrackTrace("Hello World!");

                using (var httpClient = new HttpClient())
                {
                    // Http dependency is automatically tracked!
                    httpClient.GetAsync("https://microsoft.com").Wait();
                }

            }

            // before exit, flush the remaining data
            telemetryClient.Flush();

            // Console apps should use the WorkerService package.
            // This uses ServerTelemetryChannel which does not have synchronous flushing.
            // For this reason we add a short 5s delay in this sample.
            
            Task.Delay(5000).Wait();

            // If you're using InMemoryChannel, Flush() is synchronous and the short delay is not required.

        }

        static DependencyTrackingTelemetryModule InitializeDependencyTracking(TelemetryConfiguration configuration)
        {
            var module = new DependencyTrackingTelemetryModule();

            // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.chinacloudapi.cn");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.cloudapi.de");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.usgovcloudapi.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("localhost");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("127.0.0.1");

            // enable known dependency tracking, note that in future versions, we will extend this list. 
            // please check default settings in https://github.com/microsoft/ApplicationInsights-dotnet-server/blob/develop/WEB/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt

            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");

            // initialize the module
            module.Initialize(configuration);

            return module;
        }
    }
}

次のステップ

  • 依存関係の監視: REST、SQL、その他の外部リソースの処理速度が低下しているかどうかを確認します。
  • API の使用 : アプリのパフォーマンスと使用の詳細を表示するための独自のイベントとメトリックスを送信します。