Использование Application Insights для телеметрии .NET Aspire
Azure Application Insights, функция Azure Monitor, отличается в Управлении производительностью приложений (APM) для веб-приложений в реальном времени. Проекты .NET Aspire разработаны для использования OpenTelemetry в телеметрии приложений. OpenTelemetry поддерживает модель расширения для поддержки отправки данных в разные API. .NET .NET Aspire использует OTLP по умолчанию для экспорта телеметрии, который используется панелью мониторинга во время разработки. Azure Monitor еще не поддерживает OTLP, поэтому приложения должны быть изменены для использования экспортера Azure Monitor и настроены с помощью строки подключения.
Чтобы использовать Application Insights, необходимо указать ее конфигурацию в проекте узла приложения и использовать дистрибутив Azure Monitor в проекте службы по умолчанию.
Выбор способа настройки Application Insights
.NET Aspire имеет возможность предоставлять облачные ресурсы в рамках облачного развертывания, включая Application Insights. В проекте .NET Aspire вы можете решить, хотите ли вы, чтобы .NET Aspire подготовил ресурс Application Insights при развертывании в Azure. Вы также можете использовать существующий ресурс Application Insights, указав строку подключения. Сведения о подключении управляются конфигурацией ресурсов в проекте узла приложения.
Подготовка Application Insights во время развертывания Azure
С помощью этого параметра экземпляр Application Insights будет создан для вас при развертывании приложения с помощью Azure Developer CLI (azd
).
Чтобы использовать автоматическое предоставление, необходимо указать зависимость в проекте узла приложения и ссылаться на нее в каждом проекте или ресурсе, которому необходимо отправлять данные телеметрии в Application Insights. Ниже приведены действия.
Добавьте ссылку на пакет NuGet Aspire.Hosting.Azure.ApplicationInsights в проекте узла приложения.
Обновите код узла приложения, чтобы использовать ресурс Application Insights и ссылаться на него из каждого проекта:
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();
Выполните шаги в для развертывания проекта .NET Aspire на Azure Container Apps с использованием Azure Developer CLI (подробного руководства) для развертывания приложения на Azure Container Apps.
azd
создаст ресурс Application Insights в рамках одной группы ресурсов и настроит строку подключения для каждого контейнера.
Вручное предоставление ресурса Application Insights
Application Insights использует строку подключения, чтобы сообщить экспортеру OpenTelemetry, куда отправлять данные телеметрии. Строка подключения является специфичной для экземпляра Application Insights, в который необходимо отправить телеметрию. Его можно найти на странице обзора экземпляра Application Insights.
Если вы хотите использовать экземпляр Application Insights, подготовленный вручную, следует использовать API AddConnectionString
в проекте узла приложения, чтобы сообщить проектам или контейнерам, где отправлять данные телеметрии. Дистрибутив Azure Monitor ожидает, что переменная среды будет APPLICATIONINSIGHTS_CONNECTION_STRING
, поэтому её необходимо явно задать при определении строки подключения.
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();
Использование ресурсов во время разработки
При локальном запуске проекта .NET.NET Aspire предыдущий код считывает строку подключения из конфигурации. Поскольку это секрет, вы должны хранить это значение в секретах приложения . Щелкните правой кнопкой мыши проект узла приложения и выберите Управление секретами в контекстном меню, чтобы открыть файл секретов для проекта узла приложения. В файле добавьте ключ и определенную строку подключения, приведенный ниже пример предназначен для иллюстрации.
{
"ConnectionStrings": {
"myInsightsResource": "InstrumentationKey=12345678-abcd-1234-abcd-1234abcd5678;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com"
}
}
Заметка
name
, указанный в коде узла приложения, должен соответствовать ключу в разделе ConnectionStrings
в файле параметров.
Использование ресурсов во время развертывания
При развертывании приложения Aspire сAzure Developer CLI (azd
) он распознает ресурс строки подключения и запрашивает значение. Это позволяет использовать другой ресурс для развертывания из значения, используемого для локальной разработки.
Смешанное развертывание
Если вы хотите использовать другой механизм развертывания для каждого контекста выполнения, используйте соответствующий API условно. Например, следующий код использует предварительно предоставленное подключение во время разработки и автоматически подготовленный ресурс во время развертывания.
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();
Совет
Приведенный выше код требует предоставить сведения о строке подключения в секретах приложения для использования во время разработки и вы будете запрошены ввести строку подключения системой azd
во время развертывания.
Использование дистрибутива монитора Azure
Чтобы упростить экспорт в Azure Monitor, в этом примере используется репозиторий экспортера Azure Monitor. Это пакет-оболочка вокруг пакета Azure Monitor OpenTelemetry Exporter, который упрощает экспорт данных для Azure Monitor с набором обычных значений по умолчанию.
Добавьте следующий пакет в проект ServiceDefaults
, чтобы он был включен в каждую из .NET.NET Aspire служб. Дополнительные сведения см. в разделе .NET.NET Aspire настройки по умолчанию для службы.
<PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore"
Version="*" />
Добавьте инструкцию using в верхнюю часть проекта.
using Azure.Monitor.OpenTelemetry.AspNetCore;
Раскомментируйте строку в AddOpenTelemetryExporters
для использования экспортера монитора 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;
}
Можно дополнительно настроить экспортер Azure Monitor, включая настройку имени ресурса и изменение выборки. Дополнительные сведения см. в разделе Настройка экспортера монитора Azure. Используя версию UseAzureMonitor()
без параметров, строка подключения будет извлечена из настроенной переменной среды APPLICATIONINSIGHTS_CONNECTION_STRING
с помощью проекта узла приложения.
.NET Aspire