Użyj Application Insights do telemetrii .NET Aspire
Azure Application Insights, funkcja Monitora Azure, doskonale radzi sobie w zarządzaniu wydajnością aplikacji (APM) dla aplikacji internetowych w czasie rzeczywistym. .NET Aspire projekty są przeznaczone do używania OpenTelemetry do celów telemetrii aplikacji. OpenTelemetry obsługuje model rozszerzenia do wspierania wysyłania danych do różnych APM. .NET .NET Aspire domyślnie używa protokołu OTLP do eksportowania danych telemetrycznych, który jest używany przez pulpit nawigacyjny podczas programowania. Azure Monitor nie obsługuje jeszcze OTLP, dlatego aplikacje muszą zostać zmodyfikowane, aby używać eksportera Azure Monitor, oraz skonfigurowane przy użyciu parametrów połączenia.
Aby użyć usługi Application Insights, należy określić jego konfigurację w projekcie hosta aplikacji i użyć dystrybucji Azure Monitor w projekcie domyślnym usługi.
Wybieranie sposobu przydzielania zasobów Application Insights
.NET Aspire ma możliwość udostępniania zasobów w chmurze jako część wdrożenia w chmurze, w tym Application Insights. W projekcie .NET Aspire możesz zdecydować, czy chcesz, aby .NET Aspire przydzielił zasób Application Insights podczas wdrażania do Azure. Możesz również użyć istniejącego zasobu Application Insights, podając jego parametry połączenia. Informacje o połączeniu są zarządzane przez konfigurację zasobu w projekcie hosta aplikacji.
Konfigurowanie usługi Application Insights podczas wdrażania Azure
Dzięki tej opcji, instancja Application Insights zostanie utworzona podczas wdrażania aplikacji przy użyciu Azure Developer CLI (azd
).
Aby użyć automatycznej aprowizacji, należy określić zależność w projekcie hosta aplikacji i odwołać się do niego w każdym projekcie/zasobie, który musi wysyłać dane telemetryczne do Application Insights. Kroki obejmują:
Dodaj odwołanie do pakietu NuGet do Aspire.Hosting.Azure.ApplicationInsights w projekcie hosta aplikacji.
Zaktualizuj kod hosta aplikacji, aby użyć zasobu Application Insights i odwołać się do niego z każdego projektu:
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();
Wykonaj kroki opisane w , aby wdrożyć projekt .NET Aspire do Azure Container Apps przy użyciu Azure Developer CLI (szczegółowego przewodnika), aby wdrożyć aplikację w Azure Container Apps.
azd
utworzy zasób Application Insights w ramach tej samej grupy zasobów i skonfiguruje parametry połączenia dla każdego kontenera.
Ręczne przydzielanie zasobu Application Insights
Application Insights używa parametrów połączenia, aby poinformować eksportera OpenTelemetry, gdzie wysyłać dane telemetryczne. Parametry połączenia są specyficzne dla wystąpienia Application Insights, do którego chcesz wysłać dane telemetryczne. Można znaleźć to na stronie podsumowania wystąpienia usługi Application Insights.
Jeśli chcesz skorzystać z wystąpienia Application Insights, które zostało udostępnione ręcznie, użyj API AddConnectionString
w projekcie hosta aplikacji, aby wskazać projektom/kontenerom, gdzie wysyłać dane telemetryczne. Dystrybucja monitora Azure oczekuje, że zmienna środowiskowa będzie APPLICATIONINSIGHTS_CONNECTION_STRING
, dlatego należy ją jawnie ustawić podczas definiowania ciągu połączenia.
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();
Użycie zasobów podczas programowania
Podczas lokalnego uruchamiania projektu .NET.NET Aspire powyższy kod odczytuje parametry połączenia z konfiguracji. Ponieważ jest to tajne, należy przechowywać wartość w tajnych danych aplikacji. Kliknij prawym przyciskiem myszy na projekcie aplikacji hostującej i wybierz Zarządzaj tajemnicami z menu kontekstowego, aby otworzyć plik tajemnic dla projektu aplikacji hostującej. W pliku dodaj klucz i określone parametry połączenia, poniższy przykład służy do celów ilustracyjnych.
{
"ConnectionStrings": {
"myInsightsResource": "InstrumentationKey=12345678-abcd-1234-abcd-1234abcd5678;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com"
}
}
Notatka
name
określony w kodzie hosta aplikacji musi odpowiadać kluczowi w sekcji ConnectionStrings
w pliku ustawień.
Użycie zasobów podczas wdrażania
Podczas wdrażania aplikacji Aspire przy użyciu Azure Developer CLI (azd
)rozpozna zasób parametrów połączenia i wyświetli monit o podanie wartości. Dzięki temu można użyć innego zasobu na potrzeby wdrożenia, zamiast wartości używanej do programowania lokalnego.
Wdrożenie mieszane
Jeśli chcesz użyć innego mechanizmu wdrażania dla kontekstu wykonywania, użyj odpowiedniego interfejsu API warunkowo. Na przykład, poniższy kod używa uprzednio dostarczonego połączenia w czasie rozwoju i zasobu, który jest automatycznie aprowizowany w trakcie wdrażania.
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();
Napiwek
Powyższy kod wymaga podania stringu połączenia w tajnych wpisach aplikacji na etapie rozwoju, a azd
zażąda podania stringu połączenia przy wdrażaniu.
Użyj dystrybucji systemu monitorującego Azure
Aby ułatwić eksportowanie do usługi Azure Monitor, w tym przykładzie użyto repozytorium eksportera monitora Azure. Jest to pakiet otoki wokół pakietu Azure Monitor OpenTelemetry Eksporter, który ułatwia eksportowanie do monitora Azure z zestawem typowych wartości domyślnych.
Dodaj następujący pakiet do projektu ServiceDefaults
, aby został on uwzględniony w każdej z usług .NET.NET Aspire. Aby uzyskać więcej informacji, zobacz ustawienia domyślne usługi .NET.NET Aspire.
<PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore"
Version="*" />
Dodaj instrukcję using na początku projektu.
using Azure.Monitor.OpenTelemetry.AspNetCore;
Usuń komentarz z wiersza w AddOpenTelemetryExporters
, aby użyć eksportera monitora 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;
}
Można jeszcze bardziej dostosować eksportera monitora Azure, w tym dostosować nazwę zasobu i zmienić próbkowanie. Aby uzyskać więcej informacji, zobacz Dostosowywanie eksportera Azure Monitor. Użycie wersji UseAzureMonitor()
bez parametrów spowoduje pobranie łańcucha połączenia ze zmiennej środowiskowej APPLICATIONINSIGHTS_CONNECTION_STRING
, którą skonfigurowaliśmy za pośrednictwem projektu hosta aplikacji.