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()
ySleep
/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 usaInMemoryChannel
.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 usanTelemetryConfiguration.CreateDefault()
oTelemetryConfiguration.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;
}
}
}