Application Insights para aplicativos do console .NET
Aviso
Use o pacote Microsoft.ApplicationInsights.WorkerService e as instruções associadas do Application Insights para aplicativos do Serviço de Trabalho (aplicativos não HTTP) para aplicativos de console. Ele é compatível com versões lts de suporte de longo prazo do .NET Core e .NET Framework ou superior.
O Application Insights permite que você monitore seu aplicativo Web quanto à disponibilidade, desempenho e uso.
Introdução
No portal do Azure, crie um recurso do Application Insights.
Faça uma cópia da cadeia de conexão. Localize a cadeia de conexão no menu suspenso Informações básicas do recurso que você criou.
Instale o pacote Microsoft.ApplicationInsights mais recente.
Configure a cadeia de conexão no seu código antes de acompanhar qualquer telemetria (ou configure a variável de ambiente
APPLICATIONINSIGHTS_CONNECTION_STRING
). Depois disso, você deve ser capaz de acompanhar a telemetria manualmente e vê-la no portal do Azure.// 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!");
Observação
A telemetria não é enviada instantaneamente. Os itens são agrupados e enviados pelo SDK do Application Insights. Os aplicativos de console são encerrados após chamar os métodos
Track()
.A telemetria pode não ser enviada a menos que
Flush()
eSleep
/Delay
sejam feitos antes que o aplicativo seja encerrado, conforme mostrado no exemplo completo posteriormente neste artigo.Sleep
não é necessário se você estiver usandoInMemoryChannel
.Instale a versão mais recente do pacote Microsoft.ApplicationInsights.DependencyCollector. Ele acompanha automaticamente o HTTP, SQL ou algumas outras chamadas de dependência externa.
Você pode inicializar e configurar o Application Insights pelo código ou usando o arquivo ApplicationInsights.config
. Verifique se a inicialização ocorre o mais cedo possível.
Observação
O ApplicationInsights.config não é compatível com aplicativos .NET Core.
Usar o arquivo de configuração
Para aplicativos baseados em .NET Framework, por padrão, o SDK do Application Insights procura pelo arquivo ApplicationInsights.config
no diretório de trabalho quando TelemetryConfiguration
está sendo criado. Não há suporte para a leitura do arquivo de configuração no .NET Core.
TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present
Você também pode especificar um caminho para o arquivo de configuração:
using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);
Você pode obter um exemplo completo do arquivo de configuração ao instalar a versão mais recente do pacote Microsoft.ApplicationInsights.WindowsServer. Veja aqui a configuração mínima para a coleção de dependência que é equivalente ao exemplo 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>
Configurar a coleta de telemetria do código
Observação
Não há suporte para a leitura do arquivo de configuração no .NET Core.
Durante a inicialização do aplicativo, crie e configure uma instância
DependencyTrackingTelemetryModule
. Ela deve ser singleton e deve ser preservada pelo tempo de vida do aplicativo.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);
Adicionar inicializadores de telemetria comuns:
// ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
Se você criou a configuração com um construtor
TelemetryConfiguration()
sem formatação, será necessário também habilitar o suporte de correlação. Isso não será necessário se você leu a configuração de um arquivo ou usouTelemetryConfiguration.CreateDefault()
ouTelemetryConfiguration.Active
.configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
Você também pode instalar e inicializar o módulo de coletor do Contador de Desempenho conforme descrito neste site.
Exemplo 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;
}
}
}