Application Insights gebruiken voor .NET Aspire telemetrie
Azure Application Insights, een functie van Azure Monitor, exceleert in Application Performance Management (APM) voor live webtoepassingen. .NET Aspire projecten zijn ontworpen voor het gebruik van OpenTelemetry voor toepassingstelemetrie. OpenTelemetry ondersteunt een extensiemodel ter ondersteuning van het verzenden van gegevens naar verschillende API's. .NET .NET Aspire maakt standaard gebruik van OTLP voor het exporteren van telemetrie, die tijdens de ontwikkeling door het dashboard wordt gebruikt. Azure Monitor ondersteunt OTLP nog niet, dus moeten de toepassingen worden gewijzigd om de Azure Monitor-exporteur te gebruiken en geconfigureerd met de verbindingsreeks.
Als u Application Insights wilt gebruiken, geeft u de configuratie op in het app-hostproject en gebruikt u de Azure Monitor-distributie in het standaardproject van de service.
Kiezen hoe Application Insights wordt ingevuld
.NET Aspire beschikt over de mogelijkheid om cloudresources in te richten als onderdeel van cloudimplementatie, waaronder Application Insights. In uw .NET Aspire-project kunt u bepalen of u .NET Aspire een Application Insights resource wilt inrichten bij de implementatie in Azure. U kunt er ook voor kiezen om een bestaande Application Insights resource te gebruiken door de bijbehorende verbindingsreeks op te geven. De verbindingsgegevens worden beheerd door de resourceconfiguratie in het app-hostproject.
Application Insights inrichten tijdens Azure implementatie
Met deze optie wordt een exemplaar van Application Insights voor u gemaakt wanneer de toepassing wordt geïmplementeerd met behulp van de Azure Developer CLI (azd
).
Als u automatische inrichting wilt gebruiken, geeft u een afhankelijkheid op in het app-hostproject en verwijst u ernaar in elk project/elke resource die telemetrie naar Application Insightsmoet verzenden. De stappen zijn onder andere:
Voeg een Nuget-pakketreferentie toe aan Aspire.Hosting.Azure.ApplicationInsights in het app-hostproject.
Werk de app-hostcode bij om de Application Insights resource te gebruiken en raadpleeg deze vanuit elk project:
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();
Volg de stappen in om een .NET Aspire-project naar Azure Container Apps te implementeren met behulp van de Azure Developer CLI (uitgebreide handleiding) om de toepassing naar Azure Container Appste implementeren.
azd
maakt een Application Insights resource als onderdeel van dezelfde resourcegroep en configureert de verbindingsstring voor elke container.
Handmatig inrichten van Application Insights resource
Application Insights gebruikt een verbindingsreeks om de OpenTelemetry exporteur te laten weten waar de telemetriegegevens moeten worden verzonden. De verbindingsreeks is specifiek voor het exemplaar van Application Insights waarnaar u de telemetrie wilt verzenden. Deze vindt u op de overzichtspagina voor het Application Insights-exemplaar.
Als u een exemplaar van Application Insights wilt gebruiken dat u handmatig hebt ingericht, moet u de AddConnectionString
-API in het app-hostproject gebruiken om de projecten/containers te laten weten waar de telemetriegegevens moeten worden verzonden. De Azure Monitor-distributie verwacht dat de omgevingsvariabele APPLICATIONINSIGHTS_CONNECTION_STRING
is, zodat deze expliciet moet worden ingesteld bij het definiëren van de verbindingsreeks.
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();
Resourcegebruik tijdens de ontwikkeling
Wanneer u het .NET.NET Aspire project lokaal uitvoert, leest de voorgaande code de verbindingsreeks uit de configuratie. Omdat dit een geheim is, moet u de waarde opslaan in app-geheimen. Klik met de rechtermuisknop op het app-hostproject en kies Geheimen beheren in het contextmenu om het geheimenbestand voor het app-hostproject te openen. Voeg in het bestand de sleutel en uw specifieke verbindingsreeks toe, het onderstaande voorbeeld is bedoeld ter illustratie.
{
"ConnectionStrings": {
"myInsightsResource": "InstrumentationKey=12345678-abcd-1234-abcd-1234abcd5678;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com"
}
}
Notitie
De name
die in de hostcode van de app is opgegeven, moet overeenkomen met een sleutel in de sectie ConnectionStrings
in het instellingenbestand.
Resourcegebruik tijdens de implementatie
Wanneer een Aspire-toepassing implementeert met Azure Developer CLI (azd
), wordt de verbindingsreeksresource herkend en wordt om een waarde gevraagd. Hierdoor kan een andere resource worden gebruikt voor de implementatie dan de resource die voor lokale ontwikkeling wordt gebruikt.
Gemengde implementatie
Als u een ander implementatiemechanisme per uitvoeringscontext wilt gebruiken, gebruikt u de juiste API voorwaardelijk. De volgende code maakt bijvoorbeeld gebruik van een vooraf opgegeven verbinding tijdens de ontwikkeling en een automatisch ingerichte resource tijdens de implementatie.
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();
Tip
Voor de voorgaande code moet u de verbindingstekenreeks in de applicatiegeheimen opgeven voor gebruik tijdens de ontwikkelingsfase. Tijdens de implementatie wordt u door azd
om de verbindingsreeks gevraagd.
De distributie van de Azure Monitor gebruiken
Om het exporteren naar Azure Monitor makkelijker te maken, wordt in dit voorbeeld de Azure Exportsysteem-Repository gebruikt. Dit is een wrapperpakket rond het pakket Azure Monitor OpenTelemetry Exporter waarmee u eenvoudiger kunt exporteren naar Azure Monitor met een set algemene standaardwaarden.
Voeg het volgende pakket toe aan het ServiceDefaults
-project, zodat het wordt opgenomen in elk van de .NET.NET Aspire-services. Zie .NET.NET Aspire servicestandaardenvoor meer informatie.
<PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore"
Version="*" />
Voeg een using-opdracht toe aan het begin van het project.
using Azure.Monitor.OpenTelemetry.AspNetCore;
Verwijder opmerkingen bij de regel in AddOpenTelemetryExporters
om de Azure monitorexporteur te gebruiken:
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;
}
Het is mogelijk om de Azure Monitor-exporteur verder aan te passen, inclusief het aanpassen van de resourcenaam en het wijzigen van de steekproef. Voor meer informatie, zie De Azure monitorexporteur aanpassen. Als u de parameterloze versie van UseAzureMonitor()
gebruikt, wordt de verbindingsreeks opgehaald uit de omgevingsvariabele APPLICATIONINSIGHTS_CONNECTION_STRING
, die we hebben geconfigureerd via het app-hostproject.