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

Application Insights を使うと、Web アプリケーションの可用性、パフォーマンス、利用状況を監視できます。Application Insights lets you monitor your web application for availability, performance, and usage.

Microsoft Azure のサブスクリプションが必要になります。You need a subscription with Microsoft Azure. Windows、Xbox Live、またはその他の Microsoft クラウド サービスの Microsoft アカウントでサインインします。Sign in with a Microsoft account, which you might have for Windows, Xbox Live, or other Microsoft cloud services. 所属するチームが組織の Azure サブスクリプションを持っている場合は、自分の Microsoft アカウントを使用してサブスクリプションに追加してもらうよう所有者に依頼してください。Your team might have an organizational subscription to Azure: ask the owner to add you to it using your Microsoft account.

注意

コンソール アプリケーションについては、ここから Microsoft.ApplicationInsights.WorkerService パッケージおよび関連付けられた手順を使用することを 強くお勧めしますIt is highly recommended to use the Microsoft.ApplicationInsights.WorkerService package and associated instructions from here for any Console Applications. このパッケージは NetStandard2.0 を対象としているため、.NET Core 2.1 以上と .NET Framework 4.7.2 以上で使用できます。This package targets NetStandard2.0, and hence can be used in .NET Core 2.1 or higher, and .NET Framework 4.7.2 or higher.

作業の開始Getting started

重要

新しい Azure リージョンでは、インストルメンテーション キーの代わりに接続文字列を使用する 必要 があります。New Azure regions require the use of connection strings instead of instrumentation keys. 接続文字列により、利用統計情報と関連付けるリソースが識別されます。Connection string identifies the resource that you want to associate your telemetry data with. また、リソースでテレメトリの宛先として使用するエンドポイントを変更することもできます。It also allows you to modify the endpoints your resource will use as a destination for your telemetry. 接続文字列をコピーし、アプリケーションのコードまたは環境変数に追加する必要があります。You will need to copy the connection string and add it to your application's code or to an environment variable.

  • Azure Portal で、Application Insights のリソースを作成しますIn the Azure portal, create an Application Insights resource. アプリケーションの種類として [一般] を選びます。For application type, choose General.
  • インストルメンテーション キーをコピーします。Take a copy of the Instrumentation Key. 先ほど作成した新しいリソースの [要点] ドロップダウン リストで、キーを探します。Find the key in the Essentials drop-down of the new resource you created.
  • 最新の Microsoft.ApplicationInsights パッケージをインストールします。Install latest Microsoft.ApplicationInsights package.
  • テレメトリを追跡する前に、コードにインストルメンテーション キーを設定します (または APPINSIGHTS_INSTRUMENTATIONKEY 環境変数を設定します)。Set the instrumentation key in your code before tracking any telemetry (or set APPINSIGHTS_INSTRUMENTATIONKEY environment variable). その後、テレメトリを手動で追跡して、Azure Portal に表示します。After that, you should be able to manually track telemetry and see it on the Azure portal
// you may use different options to create configuration as shown later in this article
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
configuration.InstrumentationKey = " *your key* ";
var telemetryClient = new TelemetryClient(configuration);
telemetryClient.TrackTrace("Hello World!");

注意

テレメトリはすぐには送信されません。Telemetry is not sent instantly. テレメトリ項目はバッチ処理され、ApplicationInsights SDK によって送信されます。Telemetry items are batched and sent by the ApplicationInsights SDK. Track() メソッドを呼び出した直後に終了するコンソール アプリでは、この記事で後述する完全な例に示すように、アプリが終了する前に Flush()Sleep/Delay が完了しない限り、テレメトリが送信されない場合があります。In Console apps, which exits right after calling Track() methods, telemetry may not be sent unless Flush() and Sleep/Delay is done before the app exits as shown in full example later in this article. InMemoryChannel を使用する場合、Sleep は必要ありません。Sleep is not required if you are using InMemoryChannel. Sleep の必要性に関してはアクティブな問題があります。参照先:ApplicationInsights-dotnet/issues/407There is an active issue regarding the need for Sleep which is tracked here: ApplicationInsights-dotnet/issues/407

コードから、または ApplicationInsights.config ファイルを使用して、Application Insights を初期化し、構成できます。You may initialize and configure Application Insights from the code or using ApplicationInsights.config file. 初期化はできるだけ早期に実行するようにします。Make sure initialization happens as early as possible.

注意

ApplicationInsights.config を参照している説明は、.NET Framework を対象とするアプリに対してのみ適用され、.NET Core アプリケーションには適用されません。Instructions referring to ApplicationInsights.config are only applicable to apps that are targeting the .NET Framework, and do not apply to .NET Core applications.

構成ファイルを使用するUsing config file

既定では、TelemetryConfiguration が作成されると、Application Insights SDK は作業ディレクトリで ApplicationInsights.config ファイルを検索します。By default, Application Insights SDK looks for ApplicationInsights.config file in the working directory when TelemetryConfiguration is being created

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

構成ファイルのパスを指定することもできます。You may also specify path to the config file.

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

詳細については、構成ファイル リファレンスに関するページをご覧ください。For more information, see configuration file reference.

Microsoft.ApplicationInsights.WindowsServer パッケージの最新バージョンをインストールすることにより、構成ファイルの完全な例を入手できます。You may get a full example of the config file by installing latest version of Microsoft.ApplicationInsights.WindowsServer package. ここでは、このコード例と同等の依存関係コレクションの 最小 構成を示します。Here is the minimal configuration for dependency collection that is equivalent to the code example.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <InstrumentationKey>Your Key</InstrumentationKey>
  <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>

コードからテレメトリ コレクションを構成するConfiguring telemetry collection from code

注意

.NET Core では、構成ファイルの読み取りはサポートされていません。Reading config file is not supported on .NET Core. Application Insights SDK for ASP.NET Core の使用をご検討くださいYou may consider using Application Insights SDK for ASP.NET Core

  • アプリケーションの起動中に、DependencyTrackingTelemetryModule インスタンスを作成し、構成します。このインスタンスは単一にする必要があり、また、アプリケーションの有効期間中は保持する必要があります。During application start-up create and configure DependencyTrackingTelemetryModule instance - it must be singleton and must be preserved for application lifetime.
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);
  • 共通のテレメトリ初期化子を追加します。Add common telemetry initializers
// ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls
configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());

プレーンな TelemetryConfiguration() コンストラクターを使用して構成を作成した場合は、さらに相関関係のサポートを有効にする必要があります。If you created configuration with plain TelemetryConfiguration() constructor, you need to enable correlation support additionally. ファイルから構成を読み取り、TelemetryConfiguration.CreateDefault() または TelemetryConfiguration.Active を使用した場合は、不要ですIt is not needed if you read configuration from file, used TelemetryConfiguration.CreateDefault() or TelemetryConfiguration.Active.

configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
  • こちらの説明に従って、パフォーマンス カウンター コレクター モジュールをインストールし、初期化することもできますYou may also want to install and initialize Performance Counter collector module as described here

完全な例Full example

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.InstrumentationKey = "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();

            // flush is not blocking when not using InMemoryChannel so wait a bit. There is an active issue regarding the need for `Sleep`/`Delay`
            // which is tracked here: https://github.com/microsoft/ApplicationInsights-dotnet/issues/407
            Task.Delay(5000).Wait();

        }

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

次のステップNext steps

  • 依存関係の監視: REST、SQL、その他の外部リソースの処理速度が低下しているかどうかを確認します。Monitor dependencies to see if REST, SQL, or other external resources are slowing you down.
  • API の使用 : アプリのパフォーマンスと使用の詳細を表示するための独自のイベントとメトリックスを送信します。Use the API to send your own events and metrics for a more detailed view of your app's performance and usage.