次の方法で共有


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

警告

Microsoft.ApplicationInsights.WorkerService パッケージと、コンソール アプリケーション用の Application Insights for Worker Service アプリケーション (HTTP 以外のアプリケーション) の関連する手順を使用します。 これは、.NET Core および .NET Framework 以降の長期サポート (LTS) バージョンと互換性があります。

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

はじめに

  • Azure portalで、Application Insights リソースを作成します。

  • 接続文字列のコピーを取得します。 先ほど作成した新しいリソースの Essentials ドロップダウンで、接続文字列を探します。

  • 最新の 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がアプリの終了前に終わらないなら、このアーティクルの後で完全な例に示されたように、送信しません。 Sleepは、InMemoryChannelを使用している場合は必須ではありません。

  • Microsoft.ApplicationInsights.DependencyCollectかパッケージの最新バージョンをインストールします。 自動的にHTTPかSQLか他の外部の依存関係呼び出しを追跡します。

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

Note

ApplicationInsights.config は.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;
        }
    }
}