Använda Application Insights för .NET Aspire telemetri
Azure Application Insights, en funktion i Azure Monitor, utmärker sig i Application Performance Management (APM) för webbappar i realtid. .NET 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. .NET .NET 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.
För att använda Application Insights anger du dess konfiguration i appvärdprojektet och använder Azure Monitor-distributionen i standardprojektet för tjänsten.
Välja hur Application Insights ska tilldelas
.NET Aspire har möjlighet att etablera molnresurser som en del av molndistributionen, inklusive Application Insights. I ditt .NET Aspire-projekt kan du bestämma om du vill att .NET 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 appvärdprojektet.
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 appvärdprojektet 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 appvärdprojektet.
Uppdatera appvärdkoden så att den använder Application Insights resursen 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 för att distribuera ett .NET Aspire-projekt till Azure Container Apps med hjälp av Azure Developer CLI (djupgående guide) för att distribuera applikationen 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.
Om du vill använda en instans av Application Insights som du har etablerat manuellt bör du använda api:et AddConnectionString
i appvärdprojektet 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 .NET.NET 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å appvärdprojektet och välj Hantera hemligheter från snabbmenyn för att öppna hemlighetsfilen för appvärdprojektet. 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 nyckel som anges som name
i appvärdkoden måste matcha en nyckel i avsnittet ConnectionStrings
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
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 de .NET.NET Aspire tjänsterna. Mer information finns i .NET.NET Aspire tjänststandardvärden.
<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. Genom att använda den parameterlösa versionen av UseAzureMonitor()
hämtas anslutningssträngen från miljövariabeln APPLICATIONINSIGHTS_CONNECTION_STRING
, som vi konfigurerade via appvärdprojektet.
.NET Aspire