Application Insights para aplicações de consola .NET
Aviso
Utilize o pacote Microsoft.ApplicationInsights.WorkerService e as instruções associadas do Application Insights para aplicações do Serviço de Trabalho (aplicações não HTTP) para aplicações de consola. É compatível com versões de Suporte de Longo Prazo (LTS) do .NET Core e .NET Framework ou superior.
O Application Insights permite-lhe monitorizar a sua aplicação Web para disponibilidade, desempenho e utilização.
Introdução
No portal do Azure, crie um recurso do Application Insights.
Tire uma cópia da cadeia de ligação. Localize a cadeia de ligação na lista pendente Essentials do novo recurso que criou.
Instale o pacote Microsoft.ApplicationInsights mais recente.
Defina a cadeia de ligação no seu código antes de controlar qualquer telemetria (ou definir a variável de
APPLICATIONINSIGHTS_CONNECTION_STRING
ambiente). Depois disso, deverá conseguir controlar manualmente a telemetria 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!");
Nota
A telemetria não é enviada instantaneamente. Os itens são colocados em lote e enviados pelo SDK applicationInsights. As aplicações de consola saem após chamar
Track()
métodos.A telemetria pode não ser enviada a menos que
Flush()
seja feitaDelay
Sleep
/antes da saída da aplicação, conforme mostrado no exemplo completo mais adiante neste artigo.Sleep
não é necessário se estiver a utilizarInMemoryChannel
.Instale a versão mais recente do pacote Microsoft.ApplicationInsights.DependencyCollector . Monitoriza automaticamente HTTP, SQL ou outras chamadas de dependência externa.
Pode inicializar e configurar o Application Insights a partir do código ou através ApplicationInsights.config
do ficheiro. Certifique-se de que a inicialização ocorre o mais cedo possível.
Nota
ApplicationInsights.config não é suportada por aplicações .NET Core.
Utilizar o ficheiro de configuração
Por predefinição, para aplicações baseadas em .NET Framework, o SDK do Application Insights procura o ApplicationInsights.config
ficheiro no diretório de trabalho quando TelemetryConfiguration
está a ser criado. A leitura do ficheiro de configuração não é suportada no .NET Core.
TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present
Também pode especificar um caminho para o ficheiro de configuração:
using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);
Pode obter um exemplo completo do ficheiro de configuração ao instalar a versão mais recente do pacote Microsoft.ApplicationInsights.WindowsServer . Eis a configuração mínima da coleção de dependências 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 recolha de telemetria a partir do código
Nota
A leitura do ficheiro de configuração não é suportada no .NET Core.
Durante o arranque da aplicação, crie e configure uma
DependencyTrackingTelemetryModule
instância. Tem de ser singleton e tem de ser preservado durante a duração da aplicação.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 criou a configuração com um construtor simples
TelemetryConfiguration()
, tem de ativar o suporte de correlação adicionalmente. Não é necessário se ler a configuração a partir de um ficheiro ou utilizadoTelemetryConfiguration.CreateDefault()
ouTelemetryConfiguration.Active
.configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
Também poderá querer instalar e inicializar o módulo recoletor 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;
}
}
}