Freigeben über


Verwenden Sie Application Insights für .NET Aspire-Telemetrie

Azure Application Insights, ein Feature von Azure Monitor, ist hervorragend im Leistungsmanagement von Anwendungen für Echtzeit-Webanwendungen. .NET Aspire Projekte sind darauf ausgelegt, OpenTelemetry für Anwendungstelemetrie zu verwenden. OpenTelemetry unterstützt ein Erweiterungsmodell, um das Senden von Daten an verschiedene APMs zu unterstützen. .NET .NET Aspire verwendet standardmäßig OTLP für den Telemetrieexport, das während der Entwicklung im Dashboard zum Einsatz kommt. Azure Monitor unterstützt OTLP noch nicht, sodass die Anwendungen so geändert werden müssen, dass sie den Azure Monitor-Exporter verwenden und mit der Verbindungszeichenfolge konfiguriert sind.

Um Application Insights zu verwenden, geben Sie die Konfiguration im App-Hostprojekt an, und verwenden Sie die Azure Monitor-Distro im Dienststandardprojekt.

Wie Application Insights bereitgestellt wird auswählen

.NET Aspire verfügt über die Möglichkeit, Cloudressourcen als Teil der Cloudbereitstellung bereitzustellen, einschließlich Application Insights. In Ihrem .NET Aspire Projekt können Sie entscheiden, ob .NET Aspire eine Application Insights Ressource bereitstellen soll, wenn sie für Azurebereitgestellt wird. Sie können auch auswählen, dass eine vorhandene Application Insights Ressource verwendet wird, indem Sie dessen Verbindungszeichenfolge angeben. Die Verbindungsinformationen werden von der Ressourcenkonfiguration im App-Hostprojekt verwaltet.

Bereitstellung von Application Insights während der Azure Implementierung

Mit dieser Option wird eine Instanz von Application Insights für Sie erstellt, wenn die Anwendung mit dem Azure Developer CLI (azd) bereitgestellt wird.

Um die automatische Bereitstellung zu verwenden, geben Sie Abhängigkeiten im App-Hostprojekt an und verweisen Sie darauf in jedem Projekt oder jeder Ressource, die Telemetrie an Application Insightssenden muss. Die Schritte umfassen:

  • Fügen Sie einen Nuget-Paketverweis zu Aspirehinzu. Hosting.Azure. ApplicationInsights im App-Hostprojekt.

  • Aktualisieren Sie den App-Hostcode, um die Application Insights-Ressource zu verwenden, und verweisen Sie auf ihn aus den einzelnen Projekten:

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ühren Sie die Schritte in Bereitstellen eines .NET Aspire Projekts zum Azure Container Apps mithilfe der Azure Developer CLI (ausführliche Anleitung) aus, um die Anwendung für Azure Container Appsbereitzustellen. azd erstellt eine Application Insights Ressource als Teil derselben Ressourcengruppe und konfiguriert die Verbindungszeichenfolge für jeden Container.

Manuelle Bereitstellung der Application Insights-Ressource

Application Insights verwendet eine Verbindungszeichenfolge, um dem OpenTelemetry Exporter mitzuteilen, wo die Telemetriedaten gesendet werden sollen. Die Verbindungszeichenfolge ist spezifisch für die Instanz von Application Insights, an die Sie die Telemetrie senden möchten. Sie finden es auf der Seite "Übersicht" für die Instanz "Application Insights".

Platzierung der Verbindungszeichenfolge in der Benutzeroberfläche des AzureApplication Insights Portals.

Wenn Sie eine Instanz von Application Insights verwenden möchten, die Sie manuell bereitgestellt haben, sollten Sie die AddConnectionString-API im App-Hostprojekt verwenden, um den Projekten/Containern mitzuteilen, wo die Telemetriedaten gesendet werden sollen. Die Azure Monitor-Distribution erwartet, dass die Umgebungsvariable auf APPLICATIONINSIGHTS_CONNECTION_STRINGgesetzt wird, sodass sie beim Definieren der Verbindungszeichenfolge explizit festgelegt werden muss.

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

Ressourceneinsatz während der Entwicklung

Beim lokalen Ausführen des .NET.NET Aspire Projekts liest der vorherige Code die Verbindungszeichenfolge aus der Konfiguration. Da dies ein Geheimnis ist, sollten Sie den Wert in App-Geheimnissenspeichern. Klicken Sie mit der rechten Maustaste auf das App-Hostprojekt, und wählen Sie im Kontextmenü "Geheime Schlüssel verwalten" aus, um die geheime Datei für das App-Hostprojekt zu öffnen. Fügen Sie in der Datei den Schlüssel und Ihre spezifische Verbindungszeichenfolge hinzu; das folgende Beispiel dient zu Veranschaulichungszwecken.

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

Anmerkung

Die im App-Hostcode angegebene name muss mit einem Schlüssel im Abschnitt ConnectionStrings in der Einstellungsdatei übereinstimmen.

Ressourcennutzung während der Bereitstellung

Wenn eine Aspire Anwendung mit Azure Developer CLI (azd)bereitstellen, erkennt sie die Verbindungszeichenfolgenressource und fordert einen Wert ein. Dadurch kann eine andere Ressource für die Bereitstellung verwendet werden als der Wert, der für die lokale Entwicklung verwendet wird.

Gemischte Bereitstellung

Wenn Sie einen anderen Bereitstellungsmechanismus pro Ausführungskontext verwenden möchten, verwenden Sie die entsprechende API bedingt. Zum Beispiel verwendet der folgende Code bei der Entwicklung eine vorgegebene Verbindung und bei der Bereitstellung eine automatisch bereitgestellte Ressource.

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

Trinkgeld

Der vorstehende Code erfordert, dass Sie die Verbindungszeichenfolgeninformationen in App-Geheimnissen für die Entwicklungszeit bereitstellen. Sie werden bei der Bereitstellung aufgefordert, die Verbindungszeichenfolge einzugeben, wobei azd das Abfrageelement ist.

Verwenden Sie das Azure Monitor-Distro

Um den Export in den Azure-Monitor zu vereinfachen, verwendet dieses Beispiel das Azure-Monitor-Exporter-Repo. Dies ist ein Wrapperpaket um das Azure Monitor OpenTelemetry Exporter-Paket, das das Exportieren in Azure Monitor mit einer Reihe gängiger Standardwerte erleichtert.

Fügen Sie das folgende Paket zum ServiceDefaults Projekt hinzu, sodass es in jedem der .NET.NET Aspire Dienste enthalten sein wird. Weitere Informationen finden Sie unter .NET.NET Aspire Dienststandardeinstellungen.

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

Fügen Sie am Anfang des Projekts eine using-Anweisung hinzu.

using Azure.Monitor.OpenTelemetry.AspNetCore;

Heben Sie die Kommentierung in AddOpenTelemetryExporters auf, um den Exporter für den Azure-Monitor zu verwenden.

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

Es ist möglich, den Azure Monitor-Exporter weiter anzupassen, einschließlich des Anpassens des Ressourcennamens und der Stichprobe. Weitere Informationen finden Sie unter Anpassen des Azure Monitor-Exporters. Wenn Sie die parameterlose Version von UseAzureMonitor()verwenden, wird die Verbindungszeichenfolge aus der Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING abgerufen, die wir über das App-Hostprojekt konfiguriert haben.