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