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 feitaDelaySleep/antes da saída da aplicação, conforme mostrado no exemplo completo mais adiante neste artigo. Sleep não é necessário se estiver a utilizar InMemoryChannel.

  • 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 utilizado TelemetryConfiguration.CreateDefault() ou TelemetryConfiguration.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;
        }
    }
}