Application Insights per le applicazioni console .NET
Avviso
Usare il pacchetto Microsoft.ApplicationInsights.WorkerService e le istruzioni associate da Application Insights per le applicazioni del servizio di lavoro (applicazioni non HTTP) per le applicazioni console. È compatibile con le versioni LTS (Long Term Support) di .NET Core e .NET Framework o versioni successive.
Application Insights consente di monitorare la disponibilità, le prestazioni e l'uso dell'applicazione Web.
Introduzione
Nella portale di Azure creare una risorsa di Application Insights.
Eseguire una copia della stringa di connessione. Trovare la stringa di connessione nell'elenco a discesa Informazioni di base della nuova risorsa creata.
Installare il pacchetto Microsoft.ApplicationInsights più recente.
Impostare la stringa di connessione nel codice prima di tenere traccia dei dati di telemetria (o impostare la
APPLICATIONINSIGHTS_CONNECTION_STRING
variabile di ambiente). Successivamente, dovrebbe essere possibile tenere traccia dei dati di telemetria manualmente e visualizzarlo nel portale di 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
I dati di telemetria non vengono inviati immediatamente. Gli elementi vengono inseriti in batch e inviati da ApplicationInsights SDK. Le app console terminano dopo aver chiamato i
Track()
metodi.I dati di telemetria potrebbero non essere inviati a meno che
Flush()
non vengano eseguiti primaDelay
Sleep
/dell'uscita dall'app, come illustrato nell'esempio completo più avanti in questo articolo.Sleep
non è obbligatorio se si usaInMemoryChannel
.Installare la versione più recente del pacchetto Microsoft.ApplicationInsights.DependencyCollector . Tiene traccia automaticamente di chiamate HTTP, SQL o altre chiamate di dipendenza esterna.
È possibile inizializzare e configurare Application Insights dal codice o usando ApplicationInsights.config
il file . Verificare che l'inizializzazione venga eseguita non appena possibile.
Nota
ApplicationInsights.config non è supportato dalle applicazioni .NET Core.
Usare il file di configurazione
Per le applicazioni basate su .NET Framework, per impostazione predefinita, Application Insights SDK cerca il ApplicationInsights.config
file nella directory di lavoro quando TelemetryConfiguration
viene creato. La lettura del file di configurazione non è supportata in .NET Core.
TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present
È anche possibile specificare un percorso del file di configurazione:
using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);
È possibile ottenere un esempio completo del file di configurazione installando la versione più recente del pacchetto Microsoft.ApplicationInsights.WindowsServer . Ecco la configurazione minima per la raccolta di dipendenze equivalente all'esempio di codice:
<?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>
Configurare la raccolta di dati di telemetria dal codice
Nota
La lettura del file di configurazione non è supportata in .NET Core.
Durante l'avvio dell'applicazione, creare e configurare un'istanza
DependencyTrackingTelemetryModule
di . Deve essere singleton e deve essere mantenuto per la durata dell'applicazione.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);
Aggiungere inizializzatori di telemetria comuni:
// ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
Se è stata creata la configurazione con un costruttore normale
TelemetryConfiguration()
, è necessario abilitare anche il supporto della correlazione. Non è necessario se si legge la configurazione da un file o se si usaTelemetryConfiguration.CreateDefault()
oTelemetryConfiguration.Active
.configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
È anche possibile installare e inizializzare il modulo dell'agente di raccolta contatore delle prestazioni come descritto in questo sito Web.
Esempio 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;
}
}
}