Dela via


Använda Application Insights för Aspire telemetri

Azure Application Insights, en funktion i Azure Monitor, utmärker sig i Application Performance Management (APM) för webbappar i realtid. Aspire projekt är utformade för att använda OpenTelemetry för programtelemetri. OpenTelemetry stöder en tilläggsmodell som stöder sändning av data till olika API:er. Aspire använder OTLP som standard för telemetriexport, som används av instrumentpanelen under utvecklingen. Azure Monitor stöder inte (ännu) OTLP, så programmen måste ändras för att använda Azure Monitor-exportören och konfigureras med anslutningssträngen.

Om du vill använda Application Insights anger du dess konfiguration i AppHost-projektet och använder distributionenAzure Övervaka i standardprojektet för tjänsten.

Förstå telemetrialternativ

Aspire ger flexibilitet i hur telemetri samlas in och skickas till Application Insights. Det finns två huvudsakliga metoder för att integrera med Application Insights:

Klassisk SDK Application Insights

Den klassiska Application Insights SDK:t är den traditionella metoden för instrumentering av .NET program. Den innehåller funktioner som:

  • Inbyggd telemetrisamling för HTTP-begäranden, beroenden, undantag med mera.
  • Anpassad telemetri med API:et TelemetryClient .

Detta SDK är dock inte kompatibelt med OpenTelemetry-baserade konfigurationer som används av Aspire's AddServiceDefaults()-metod.

OpenTelemetry med Azure Monitor

OpenTelemetry är en modern standard för telemetrisamling. Aspire använder OpenTelemetry för spårning och mått via sin AddServiceDefaults() metod. Med OpenTelemetry:

  • Telemetri är leverantörsoberoende, vilket möjliggör integrering med flera serverdelar.
  • Du kan använda Azure Monitor OpenTelemetry Distro för att skicka telemetri till Application Insights.

Viktiga skillnader:

Egenskap Klassisk SDK Application Insights OpenTelemetry med Azure Monitor
Användarvänlighet Kräver manuell installation för avancerade funktioner. Erbjuder ett modernare, standardiserat API.
Kompatibilitet Inte kompatibel med OpenTelemetry installationer. Fullständigt kompatibel med Aspire standardvärden.
Utökningsbarhet Begränsad till Application Insights funktioner. Öppna, leverantörsneutrala, stöder andra serverdelar.
Mätinstrumentstandarder Programspecifika API:er (till exempel TelemetryClient). OpenTelemetry Standarder.

Detaljerad vägledning om varje metod finns i:

Välja hur Application Insights ska tilldelas

Aspire har möjlighet att etablera molnresurser som en del av molndistributionen, inklusive Application Insights. I ditt Aspire-projekt kan du bestämma om du vill att Aspire ska tillhandahålla en Application Insights-resurs när du distribuerar till Azure. Du kan också välja att använda en befintlig Application Insights resurs genom att ange dess anslutningssträng. Anslutningsinformationen hanteras av resurskonfigurationen i AppHost-projektet.

Konfigurering av Application Insights under Azure-utplacering

Med det här alternativet skapas en instans av Application Insights åt dig när programmet distribueras med hjälp av Azure Developer CLI (azd).

Om du vill använda automatisk etablering anger du ett beroende i AppHost-projektet och refererar till det i varje projekt/resurs som behöver skicka telemetri till Application Insights. Stegen omfattar:

  • Lägg till en Nuget-paketreferens till Aspire. Hosting.Azure. ApplicationInsights i AppHost-projektet.

  • Uppdatera AppHost-koden för att använda resursen Application Insights och referera till den från varje projekt:

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

Följ stegen i Distribuera ett Aspire projekt till Azure Container Apps med hjälp av Azure Developer CLI (djupgående guide) för att distribuera programmet till Azure Container Apps. azd skapar en Application Insights resurs som en del av samma resursgrupp och konfigurerar anslutningssträngen för varje container.

Manuell etablering av Application Insights-resursen

Application Insights använder en anslutningssträng för att tala om för OpenTelemetry exportören var telemetridata ska skickas. Anslutningssträngen är specifik för instansen av Application Insights du vill skicka telemetrin till. Den finns på sidan Översikt för application insights-instansen.

Placering av anslutningssträngar i användargränssnittet för AzureApplication Insights-portalen.

Om du vill använda en instans av Application Insights som du har etablerat manuellt bör du använda API:et AddConnectionString i AppHost-projektet för att tala om för projekten/containrarna var telemetridata ska skickas. Azure Monitor-distributionen förväntar sig att miljövariabeln ska APPLICATIONINSIGHTS_CONNECTION_STRING, så det måste anges uttryckligen när anslutningssträngen definieras.

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

Resursanvändning under utveckling

När du kör Aspire projektet lokalt läser koden ovan anslutningssträngen från konfigurationen. Eftersom det här är en hemlighet bör du lagra värdet i apphemligheter. Högerklicka på AppHost-projektet och välj Hantera hemligheter på snabbmenyn för att öppna hemlighetsfilen för AppHost-projektet. I filen lägger du till nyckeln och din specifika anslutningssträng. Exemplet nedan är i illustrationssyfte.

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

Anmärkning

Den name som anges i AppHost-koden måste matcha en nyckel i ConnectionStrings avsnittet i inställningsfilen.

Resursanvändning under distributionen

När distribuerar ett Aspire-program med Azure Developer CLI (azd)identifieras anslutningssträngsresursen och ett värde efterfrågas. Detta gör att en annan resurs kan användas för distributionen från det värde som används för lokal utveckling.

Blandad distribution

Om du vill använda en annan distributionsmekanism per körningskontext använder du lämpligt API villkorligt. Följande kod använder till exempel en fördefinierad anslutning vid utvecklingstillfället och en automatiskt etablerad resurs vid distributionstillfället.

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

Tips/Råd

Föregående kod kräver att du anger information om anslutningssträngen i apphemligheter för användning under utvecklingstiden, och vid distributionstillfället kommer azd att fråga efter anslutningssträngen.

Använda distributionen Azure Monitor

För att förenkla exportprocessen till Azure Monitor använder det här exemplet Azure Monitor Exporter-förrådet. Det här är ett omslutningspaket runt Azure Monitor OpenTelemetry Exporter-paketet som gör det enklare att exportera till Azure Monitor med en uppsättning vanliga standardvärden.

Lägg till följande paket i ServiceDefaults projektet så att det inkluderas i var och en av Aspire tjänsterna. Mer information finns i Aspire standardinställningar för tjänsten.

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

Lägg till en using-instruktion överst i projektet.

using Azure.Monitor.OpenTelemetry.AspNetCore;

Avkommentera raden hos AddOpenTelemetryExporters för att använda Azure Monitor-exportören:

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

Det är möjligt att ytterligare anpassa Azure Monitor-exportören, inklusive att anpassa resursnamnet och ändra samplingen. Mer information finns i Anpassa Azure Monitor-exportören. Med den parameterlösa versionen av UseAzureMonitor()hämtar vi anslutningssträngen APPLICATIONINSIGHTS_CONNECTION_STRING från miljövariabeln som vi konfigurerade via AppHost-projektet.