Application Insights を .NET Aspire テレメトリに使用する
Azure Application Insightsは、Azure Monitor の機能で、ライブ Web アプリケーションのアプリケーション パフォーマンス管理 (APM) に優れています。 .NET Aspire プロジェクトは、アプリケーション テレメトリに OpenTelemetry を使用するように設計されています。 OpenTelemetry では、さまざまな API へのデータ送信をサポートする拡張機能モデルがサポートされています。 .NET .NET Aspire では、開発時にダッシュボードによって使用されるテレメトリ エクスポートに既定で OTLP が使用されます。 Azure Monitor は OTLP をサポートしていないため、Azure Monitor エクスポーターを使用するようにアプリケーションを変更し、接続文字列で構成する必要があります。
Application Insights を使用するには、アプリ ホスト プロジェクト
Application Insights のプロビジョニング方法の選択
.NET Aspire には、クラウド デプロイの一部としてクラウド リソースをプロビジョニングする機能 (Application Insightsなど) があります。 .NET Aspire プロジェクトでは、Azureにデプロイする際に .NET Aspire が Application Insights リソースをプロビジョニングするかどうかを決定できます。 接続文字列を指定して、既存の Application Insights リソースの使用を選択することもできます。 接続情報は、アプリ ホスト プロジェクトのリソース構成によって管理されます。
Azure デプロイの最中における Application Insights というサービスのプロビジョニング
このオプションを使用すると、Azure Developer CLI (azd
) を使用してアプリケーションをデプロイするときに、Application Insights のインスタンスが自動的に作成されます。
自動プロビジョニングを使用するには、アプリ ホスト プロジェクトで依存関係を指定し、テレメトリを Application Insightsに送信する必要がある各プロジェクト/リソースで参照します。 手順は次のとおりです。
アプリホストプロジェクトの Aspire.Hosting.Azure.ApplicationInsights に NuGet パッケージ参照を追加します。
Application Insights リソースを使用するようにアプリ ホスト コードを更新し、各プロジェクトから参照します。
var builder = DistributedApplication.CreateBuilder(args);
// Automatically provision an Application Insights resource
var insights = builder.AddAzureApplicationInsights("MyApplicationInsights");
// Reference the resource from each project
var apiService = builder.AddProject<Projects.ApiService>("apiservice")
.WithReference(insights);
builder.AddProject<Projects.Web>("webfrontend")
.WithReference(apiService)
.WithReference(insights);
builder.Build().Run();
azd
は、同じリソース グループの一部として Application Insights リソースを作成し、コンテナーごとに接続文字列を構成します。
Application Insights リソースの手動プロビジョニング
Application Insights では、接続文字列を使用して、テレメトリ データの送信先を OpenTelemetry エクスポーターに伝えます。 接続文字列は、テレメトリを送信する Application Insights のインスタンスに固有です。 これは、Application Insights インスタンスの [概要] ページにあります。
Azure Application Insights ポータル UI での接続文字列の配置を
手動でプロビジョニングした Application Insights のインスタンスを使用する場合は、アプリ ホスト プロジェクトの AddConnectionString
API を使用して、テレメトリ データを送信する場所をプロジェクト/コンテナーに指示する必要があります。
Azure Monitor ディストリビューションでは、環境変数を APPLICATIONINSIGHTS_CONNECTION_STRING
に設定することを期待しているため、接続文字列を定義する際には明示的に設定する必要があります。
var builder = DistributedApplication.CreateBuilder(args);
var insights = builder.AddConnectionString(
"myInsightsResource",
"APPLICATIONINSIGHTS_CONNECTION_STRING");
var apiService = builder.AddProject<Projects.ApiService>("apiservice")
.WithReference(insights);
builder.AddProject<Projects.Web>("webfrontend")
.WithReference(apiService)
.WithReference(insights);
builder.Build().Run();
開発中のリソース使用量
.NET
.NET Aspire プロジェクトをローカルで実行する場合、上記のコードは構成から接続文字列を読み取ります。 これはシークレットであるため、
{
"ConnectionStrings": {
"myInsightsResource": "InstrumentationKey=12345678-abcd-1234-abcd-1234abcd5678;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com"
}
}
手記
アプリ ホスト コードで指定された name
は、設定ファイルの ConnectionStrings
セクション内のキーと一致する必要があります。
デプロイ時のリソース使用量
Aspire アプリケーションを Azure Developer CLI (azd
)を使用してデプロイすると、接続文字列リソースが認識され、値の入力を求められます。 これにより、ローカル開発に使用される値とは異なるリソースをデプロイに使用できます。
混合デプロイ
実行コンテキストごとに異なるデプロイ メカニズムを使用する場合は、適切な API を条件付きで使用します。 たとえば、次のコードでは、開発時に事前に指定された接続と、デプロイ時に自動的にプロビジョニングされたリソースを使用します。
var builder = DistributedApplication.CreateBuilder(args);
var insights = builder.ExecutionContext.IsPublishMode
? builder.AddAzureApplicationInsights("myInsightsResource")
: builder.AddConnectionString("myInsightsResource", "APPLICATIONINSIGHTS_CONNECTION_STRING");
var apiService = builder.AddProject<Projects.ApiService>("apiservice")
.WithReference(insights);
builder.AddProject<Projects.Web>("webfrontend")
.WithReference(apiService)
.WithReference(insights);
builder.Build().Run();
ヒント
上記のコードでは、開発時に使用するためにアプリ シークレットに接続文字列情報を指定する必要があり、デプロイ時に azd
して接続文字列の入力を求められます。
Azure Monitor ディストリビューションを使用する
この例では、Azure Monitor へのエクスポートを簡単にするために、Azure Monitor エクスポーター リポジトリを使用します。 これは、Azure Monitor OpenTelemetry Exporter パッケージのラッパー パッケージであり、一般的な既定値のセットを使用して Azure Monitor にエクスポートしやすくなります。
ServiceDefaults
プロジェクトに次のパッケージを追加して、各 .NET.NET Aspire サービスに含めます。 詳細については、「.NET.NET Aspire サービスの既定値」を参照してください。
<PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore"
Version="*" />
「using ステートメント」をプロジェクトの最初に追加します。
using Azure.Monitor.OpenTelemetry.AspNetCore;
Azure モニターエクスポーターを使用するには、AddOpenTelemetryExporters
の行をコメントアウト解除します。
private static IHostApplicationBuilder AddOpenTelemetryExporters(
this IHostApplicationBuilder builder)
{
// Omitted for brevity...
// Uncomment the following lines to enable the Azure Monitor exporter
// (requires the Azure.Monitor.OpenTelemetry.AspNetCore package)
if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]))
{
builder.Services.AddOpenTelemetry().UseAzureMonitor();
}
return builder;
}
リソース名のカスタマイズやサンプリングの変更など、Azure Monitor エクスポーターをさらにカスタマイズできます。 詳細については、「UseAzureMonitor()
を使用すると、アプリ ホスト プロジェクトを介して構成した APPLICATIONINSIGHTS_CONNECTION_STRING
環境変数から接続文字列が取得されます。
.NET Aspire