次の方法で共有


Application Insights を Aspire テレメトリに使用する

Azure Application Insightsは、Azure Monitor の機能で、ライブ Web アプリケーションのアプリケーション パフォーマンス管理 (APM) に優れています。 Aspire プロジェクトは、アプリケーション テレメトリに OpenTelemetry を使用するように設計されています。 OpenTelemetry では、さまざまな API へのデータ送信をサポートする拡張機能モデルがサポートされています。 Aspire は、開発時にダッシュボードによって使用されるテレメトリ エクスポートに既定で OTLP を使用します。 Azure Monitor は OTLP をサポートしていないため、Azure Monitor エクスポーターを使用するようにアプリケーションを変更し、接続文字列で構成する必要があります。

Application Insights を使用するには、AppHost プロジェクトでその構成を指定し、サービスの既定のプロジェクトで Azure Monitor ディストリビューションを使用します。

テレメトリ オプションについて

Aspire は、テレメトリを収集して Application Insightsに送信する方法を柔軟に提供します。 Application Insightsとの統合には、主に次の 2 つの方法があります。

クラシック Application Insights SDK

クラシック Application Insights SDK は、 .NET アプリケーションをインストルメント化するための従来の方法です。 次のような機能が提供されます。

  • HTTP 要求、依存関係、例外などの組み込みのテレメトリ収集。
  • TelemetryClient API を使用したカスタム テレメトリ。

ただし、この SDK は、OpenTelemetryの Aspire メソッドで使用されるAddServiceDefaults()ベースの構成と互換性がありません。

OpenTelemetry Azure モニターと一緒に

OpenTelemetry は、テレメトリ収集の最新の標準です。 Aspireでは、OpenTelemetryメソッドを使用してトレースとメトリックにAddServiceDefaults()を使用します。 OpenTelemetryの場合:

  • テレメトリはベンダーに依存せず、複数のバックエンドとの統合を可能にします。
  • Azure Monitor OpenTelemetry Distro を使用して、テレメトリをApplication Insightsに送信できます。

主な違い:

特徴 クラシック Application Insights SDK OpenTelemetry Azure モニターと一緒に
使いやすさ 高度な機能を手動で設定する必要があります。 より最新の標準化された API を提供します。
互換性 OpenTelemetryセットアップと互換性がありません。 Aspireの既定値と完全に互換性があります。
拡張性 Application Insights機能に限定されます。 オープンでベンダーに依存しない、他のバックエンドがサポートされています。
インストルメンテーション標準 アプリケーション固有の API (たとえば、 TelemetryClient)。 OpenTelemetry 標準。

各アプローチの詳細なガイダンスについては、次を参照してください。

Application Insights のプロビジョニング方法の選択

Aspire には、クラウド デプロイの一部としてクラウド リソースをプロビジョニングする機能 (Application Insightsなど) があります。 Aspire プロジェクトでは、Aspireにデプロイする際に Application Insights が Azure リソースをプロビジョニングするかどうかを決定できます。 接続文字列を指定して、既存の Application Insights リソースの使用を選択することもできます。 接続情報は、AppHost プロジェクトのリソース構成によって管理されます。

Azure デプロイの最中における Application Insights というサービスのプロビジョニング

このオプションを使用すると、Application Insights (Azure Developer CLI) を使用してアプリケーションをデプロイするときに、azd のインスタンスが自動的に作成されます。

自動プロビジョニングを使用するには、AppHost プロジェクトで依存関係を指定し、テレメトリを Application Insightsに送信する必要がある各プロジェクト/リソースで依存関係を参照します。 手順は次のとおりです。

  • AppHost プロジェクトに NuGet パッケージ参照を Aspire.Hosting.Azure.ApplicationInsights に追加します。

  • Application Insights リソースを使用するように AppHost コードを更新し、各プロジェクトから参照します。

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();

Aspire プロジェクトを配置する」の手順に従って、Azure Container Apps (詳細ガイド) を使用してAzure Developer CLIし、アプリケーションをAzure Container Appsにデプロイします。 azd は、同じリソース グループの一部として Application Insights リソースを作成し、コンテナーごとに接続文字列を構成します。

Application Insights リソースの手動プロビジョニング

Application Insights では、接続文字列を使用して、テレメトリ データの送信先を OpenTelemetry エクスポーターに伝えます。 接続文字列は、テレメトリを送信する Application Insights のインスタンスに固有です。 これは、Application Insights インスタンスの [概要] ページにあります。

Azure Application Insights ポータル UI での接続文字列の配置を します。

手動でプロビジョニングした Application Insights のインスタンスを使用する場合は、AppHost プロジェクトの 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();

開発中のリソース使用量

Aspire プロジェクトをローカルで実行する場合、上記のコードは構成から接続文字列を読み取ります。 これはシークレットであるため、アプリ シークレットに値を格納する必要があります。 AppHost プロジェクトを右クリックし、コンテキスト メニューから [ シークレットの管理 ] を選択して、AppHost プロジェクトのシークレット ファイルを開きます。 このファイルにキーと特定の接続文字列を追加します。次の例は、説明を目的としたものです。

{
  "ConnectionStrings": {
    "myInsightsResource": "InstrumentationKey=12345678-abcd-1234-abcd-1234abcd5678;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com"
  }
}

AppHost コードで指定された 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 プロジェクトに次のパッケージを追加して、各Aspire サービスに含めます。 詳細については、サービスの既定値Aspire参照してください。

<PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore" 
                  Version="*" />

「using ステートメント」をプロジェクトの最初に追加します。

using Azure.Monitor.OpenTelemetry.AspNetCore;

AddOpenTelemetryExporters モニターエクスポーターを使用するには、Azure の行をコメントアウト解除します。

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()を使用すると、AppHost プロジェクトを介して構成した APPLICATIONINSIGHTS_CONNECTION_STRING 環境変数から接続文字列が取得されます。