Application Insights para aplicaciones de consola .NET

Advertencia

Use el paquete Microsoft.ApplicationInsights.WorkerService y las instrucciones asociadas de Application Insights para aplicaciones de Servicio de trabajo (aplicaciones que no son HTTP) para aplicaciones de consola. Es compatible con las versiones de soporte técnico a largo plazo (LTS) de .NET Core y .NET Framework o superior.

Application Insights permite supervisar la disponibilidad, el rendimiento y el uso de una aplicación web.

Primeros pasos

  • En el Azure Portal, cree un recurso de Application Insights.

  • Haga una copia de la cadena de conexión. Busque la cadena de conexión en la lista desplegable Essentials del recurso que creó.

  • Instale el paquete Microsoft.ApplicationInsights más reciente.

  • Establezca la cadena de conexión del código antes de hacer el seguimiento de cualquier dato de telemetría (o establezca la variable de entorno APPLICATIONINSIGHTS_CONNECTION_STRING). Después de eso, debe ser capaz de hacer un seguimiento manual de la telemetría y verla en Azure Portal.

    // You may use different options to create configuration as shown later in this article
    TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
    configuration.ConnectionString = <Copy connection string from Application Insights Resource Overview>;
    var telemetryClient = new TelemetryClient(configuration);
    telemetryClient.TrackTrace("Hello World!");
    

    Nota

    Los datos de telemetría no se envían al instante. Los elementos se procesan por lotes y se envían mediante el SDK de ApplicationInsights. Las aplicaciones de consola salen después de llamar a Track() métodos.

    No se enviaría la telemetría a menos que se hagan Flush() y Sleep/Delay antes de que salga la aplicación, como se muestra en el ejemplo completo más adelante en este artículo. Sleep no es necesario si usa InMemoryChannel.

  • Instale la última versión del paquete Microsoft.ApplicationInsights.DependencyCollector. Sigue automáticamente HTTP, SQL, o algunas otras llamadas de dependencia externas.

Puede inicializar y configurar Application Insights desde el código o con el archivo ApplicationInsights.config. Asegúrese de que la inicialización se realice tan pronto como sea posible.

Nota

ApplicationInsights.config no es compatible con las aplicaciones de .NET Core.

Uso del archivo de configuración

Para la aplicación basada en .NET Framework, de manera predeterminada, el SDK de Application Insights busca el archivo ApplicationInsights.config en el directorio de trabajo cuando se crea TelemetryConfiguration. La lectura del archivo de configuración no se admite en .NET Core.

TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present

También puede especificar una ruta de acceso al archivo de configuración:

using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);

Puede obtener un ejemplo completo del archivo de configuración mediante la instalación de la versión más reciente del paquete Microsoft.ApplicationInsights.WindowsServer. Esta es la configuración mínima para la colección de dependencias que es equivalente al ejemplo de código:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <ConnectionString>"Copy connection string from Application Insights Resource Overview"</ConnectionString>
  <TelemetryInitializers>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.HttpDependenciesParsingTelemetryInitializer, Microsoft.AI.DependencyCollector"/>
  </TelemetryInitializers>
  <TelemetryModules>
    <Add Type="Microsoft.ApplicationInsights.DependencyCollector.DependencyTrackingTelemetryModule, Microsoft.AI.DependencyCollector">
      <ExcludeComponentCorrelationHttpHeadersOnDomains>
        <Add>core.windows.net</Add>
        <Add>core.chinacloudapi.cn</Add>
        <Add>core.cloudapi.de</Add>
        <Add>core.usgovcloudapi.net</Add>
        <Add>localhost</Add>
        <Add>127.0.0.1</Add>
      </ExcludeComponentCorrelationHttpHeadersOnDomains>
      <IncludeDiagnosticSourceActivities>
        <Add>Microsoft.Azure.ServiceBus</Add>
        <Add>Microsoft.Azure.EventHubs</Add>
      </IncludeDiagnosticSourceActivities>
    </Add>
  </TelemetryModules>
  <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
</ApplicationInsights>

Configuración de la colección de telemetría a partir del código

Nota

La lectura del archivo de configuración no se admite en .NET Core.

  • Durante el inicio de la aplicación, cree y configure una DependencyTrackingTelemetryModule instancia. Debe ser singleton y debe conservarse durante la vigencia de la aplicación.

    var module = new DependencyTrackingTelemetryModule();
    
    // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
    module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
    //...
    
    // enable known dependency tracking, note that in future versions, we will extend this list. 
    // please check default settings in https://github.com/Microsoft/ApplicationInsights-dotnet-server/blob/develop/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt
    
    module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
    module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");
    //....
    
    // initialize the module
    module.Initialize(configuration);
    
  • Agregue inicializadores de telemetría comunes:

    // ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls
    configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
    

    Si ha creado la configuración con un constructor TelemetryConfiguration() sin formato, es preciso que también habilite la compatibilidad con la correlación. No es necesario si lee configuración de un archivo, o se usan TelemetryConfiguration.CreateDefault() o TelemetryConfiguration.Active.

    configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
    
  • También podría instalar e inicializar el módulo de recopilador Contador de rendimiento, como se describe eneste sitio web.

Ejemplo completo

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Extensibility;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();

            configuration.ConnectionString = "removed";
            configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());

            var telemetryClient = new TelemetryClient(configuration);
            using (InitializeDependencyTracking(configuration))
            {
                // run app...

                telemetryClient.TrackTrace("Hello World!");

                using (var httpClient = new HttpClient())
                {
                    // Http dependency is automatically tracked!
                    httpClient.GetAsync("https://microsoft.com").Wait();
                }

            }

            // before exit, flush the remaining data
            telemetryClient.Flush();

            // Console apps should use the WorkerService package.
            // This uses ServerTelemetryChannel which does not have synchronous flushing.
            // For this reason we add a short 5s delay in this sample.
            
            Task.Delay(5000).Wait();

            // If you're using InMemoryChannel, Flush() is synchronous and the short delay is not required.

        }

        static DependencyTrackingTelemetryModule InitializeDependencyTracking(TelemetryConfiguration configuration)
        {
            var module = new DependencyTrackingTelemetryModule();

            // prevent Correlation Id to be sent to certain endpoints. You may add other domains as needed.
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.windows.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.chinacloudapi.cn");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.cloudapi.de");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("core.usgovcloudapi.net");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("localhost");
            module.ExcludeComponentCorrelationHttpHeadersOnDomains.Add("127.0.0.1");

            // enable known dependency tracking, note that in future versions, we will extend this list. 
            // please check default settings in https://github.com/microsoft/ApplicationInsights-dotnet-server/blob/develop/WEB/Src/DependencyCollector/DependencyCollector/ApplicationInsights.config.install.xdt

            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.ServiceBus");
            module.IncludeDiagnosticSourceActivities.Add("Microsoft.Azure.EventHubs");

            // initialize the module
            module.Initialize(configuration);

            return module;
        }
    }
}