Compartir a través de


Uso de Application Insights para la telemetría de .NET Aspire

Azure Application Insights, una característica de Azure Monitor, destaca en Administración del rendimiento de aplicaciones (APM) para aplicaciones web activas. Los proyectos .NET Aspire están diseñados para utilizar OpenTelemetry en la telemetría de aplicaciones. OpenTelemetry admite un modelo de extensión para admitir el envío de datos a diferentes API. .NET .NET Aspire utiliza OTLP de forma predeterminada para la exportación de telemetría, que utiliza el panel durante su desarrollo. Azure Monitor aún no admite OTLP, por lo que es necesario modificar las aplicaciones para que utilicen el exportador de Azure Monitor y configurarlas con la cadena de conexión.

Para usar Application Insights, especifica su configuración en el proyecto host de la aplicación y y usa la distribución de Azure Monitor en el proyecto predeterminado del servicio.

Elección de cómo se aprovisiona Application Insights

.NET Aspire tiene la capacidad de aprovisionar recursos en la nube como parte de la implementación en la nube, incluido Application Insights. En su proyecto de .NET Aspire, puede decidir si desea que .NET Aspire aprovisione un recurso de Application Insights al implementar en Azure. También puede seleccionar usar un recurso de Application Insights existente proporcionando su cadena de conexión. La configuración de recursos del proyecto host de la aplicación administra la información de conexión.

Aprovisionamiento de Application Insights durante la implementación de Azure

Con esta opción, se creará una instancia de Application Insights automáticamente cuando la aplicación se implemente mediante el Azure Developer CLI (azd).

Para usar el aprovisionamiento automático, especifique una dependencia en el proyecto host de la aplicación y haga referencia a ella en cada proyecto o recurso que necesite enviar telemetría a Application Insights. Los pasos incluyen:

  • Agregue una referencia de paquete Nuget a Aspire.Hosting.Azure.ApplicationInsights en el proyecto host de la aplicación.

  • Actualice el código de host de la aplicación para usar el recurso de Application Insights y haga referencia a él desde cada proyecto:

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

Siga los pasos en para implementar un proyecto de .NET Aspire en Azure Container Apps utilizando el Azure Developer CLI (guía detallada) para desplegar la aplicación en Azure Container Apps. azd creará un recurso de Application Insights como parte del mismo grupo de recursos y configurará la cadena de conexión para cada contenedor.

Aprovisionamiento manual del recurso Application Insights

Application Insights usa una cadena de conexión para indicar al exportador de OpenTelemetry dónde enviar los datos de telemetría. La cadena de conexión es específica de la instancia de Application Insights a la que desea enviar la telemetría. Puede encontrarse en la página Información general de la instancia de Application Insights.

ubicación de la cadena de conexión en la interfaz de usuario del portal de AzureApplication Insights.

Si desea usar una instancia de Application Insights que ha aprovisionado manualmente, debe usar la API de AddConnectionString en el proyecto host de la aplicación para indicar a los proyectos o contenedores dónde enviar los datos de telemetría. La distribución de Azure Monitor espera que la variable de entorno sea APPLICATIONINSIGHTS_CONNECTION_STRING, por lo que debe establecerse explícitamente al definir la cadena de conexión.

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

Uso de recursos durante el desarrollo

Al ejecutar el proyecto de .NET.NET Aspire localmente, el código anterior lee la cadena de conexión de la configuración. Como se trata de un secreto, debe almacenar el valor en secretos de aplicación. Haga clic con el botón derecho en el proyecto host de la aplicación y elija Administrar secretos en el menú contextual para abrir el archivo de secretos para el proyecto host de la aplicación. En el archivo, agregue la clave y la cadena de conexión específica, el ejemplo siguiente es para fines ilustrativos.

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

Nota

El name especificado en el código de host de la aplicación debe coincidir con una clave dentro de la sección ConnectionStrings del archivo de configuración.

Uso de recursos durante la implementación

Cuando implementar una aplicación de Aspire con Azure Developer CLI (azd), reconocerá el recurso de cadena de conexión y solicitará un valor. Esto permite usar un recurso diferente para la implementación que el valor utilizado para el desarrollo local.

Implementación mixta

Si desea usar un mecanismo de implementación diferente por contexto de ejecución, use la API adecuada de forma condicional. Por ejemplo, el código siguiente usa una conexión proporcionada previamente en tiempo de desarrollo y un recurso aprovisionado automáticamente en el momento de la implementación.

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

Propina

El código anterior requiere que proporcione la información de la cadena de conexión en secretos de aplicación para su uso durante el tiempo de desarrollo, y se le solicitará la cadena de conexión durante la implementación por parte de azd.

Utiliza la distribución Azure Monitor

Para que la exportación a Azure Monitor sea más sencilla, en este ejemplo se usa el repositorio de exportadores de Azure Monitor. Se trata de un paquete contenedor alrededor del paquete Azure Monitor OpenTelemetry Exporter que facilita la exportación a Azure Monitor con un conjunto de valores predeterminados comunes.

Agregue el siguiente paquete al proyecto de ServiceDefaults para que se incluya en cada uno de los servicios de .NET.NET Aspire. Para obtener más información, consulte .NET.NET Aspire valores predeterminados del servicio.

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

Agregue una instrucción using en la parte superior del proyecto.

using Azure.Monitor.OpenTelemetry.AspNetCore;

Descomente la línea en AddOpenTelemetryExporters para usar el exportador Monitor de 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;
}

Es posible personalizar aún más el exportador de Azure Monitor, incluida la personalización del nombre del recurso y el cambio del muestreo. Para obtener más información, consulte Personalizar el exportador Monitor Azure. Al usar la versión sin parámetros de UseAzureMonitor(), obtendrá la cadena de conexión de la variable de entorno APPLICATIONINSIGHTS_CONNECTION_STRING, que configuramos a través del proyecto de alojamiento de la aplicación.