Application Insights för .NET-konsolprogram
Varning
Använd paketet Microsoft.ApplicationInsights.WorkerService och tillhörande instruktioner från Application Insights för Worker Service-program (icke-HTTP-program) för konsolprogram. Den är kompatibel med LTS-versioner (Long Term Support) av .NET Core och .NET Framework eller senare.
Med Application Insights kan du övervaka webbprogrammet för tillgänglighet, prestanda och användning.
Kom igång
I Azure Portal skapar du en Application Insights-resurs.
Ta en kopia av anslutningssträngen. Hitta anslutningssträngen i listrutan Essentials för den nya resursen som du skapade.
Installera det senaste Microsoft.ApplicationInsights-paketet .
Ange anslutningssträngen i koden innan du spårar telemetri (eller anger
APPLICATIONINSIGHTS_CONNECTION_STRING
miljövariabeln). Därefter bör du kunna spåra telemetri manuellt och se den i 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!");
Anteckning
Telemetri skickas inte direkt. Objekt batchhanteras och skickas av ApplicationInsights SDK. Konsolappar avslutas efter anrop
Track()
.Telemetri kanske inte skickas om inte
Flush()
ochSleep
/Delay
görs innan appen avslutas, vilket visas i det fullständiga exemplet senare i den här artikeln.Sleep
krävs inte om du använderInMemoryChannel
.Installera den senaste versionen av paketet Microsoft.ApplicationInsights.DependencyCollector . Den spårar automatiskt HTTP, SQL eller några andra externa beroendeanrop.
Du kan initiera och konfigurera Application Insights från koden eller med hjälp ApplicationInsights.config
av filen. Kontrollera att initieringen sker så tidigt som möjligt.
Anteckning
ApplicationInsights.config stöds inte av .NET Core-program.
Använda konfigurationsfilen
För .NET Framework-baserade program letar Application Insights SDK som standard efter ApplicationInsights.config
filen i arbetskatalogen när TelemetryConfiguration
den skapas. Läsning av konfigurationsfilen stöds inte på .NET Core.
TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present
Du kan också ange en sökväg till konfigurationsfilen:
using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);
Du kan få ett fullständigt exempel på konfigurationsfilen genom att installera den senaste versionen av paketet Microsoft.ApplicationInsights.WindowsServer . Här är den minimala konfigurationen för beroendeinsamling som motsvarar kodexemplet:
<?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>
Konfigurera telemetrisamling från kod
Anteckning
Läsning av konfigurationsfilen stöds inte på .NET Core.
Under programstarten skapar och konfigurerar du en
DependencyTrackingTelemetryModule
instans. Den måste vara singleton och måste bevaras under programmets livslängd.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);
Lägg till vanliga telemetriinitierare:
// ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
Om du har skapat en konfiguration med en oformaterad
TelemetryConfiguration()
konstruktor måste du även aktivera korrelationsstöd. Det behövs inte om du läser konfigurationen från en fil eller använderTelemetryConfiguration.CreateDefault()
ellerTelemetryConfiguration.Active
.configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
Du kanske också vill installera och initiera insamlaren för prestandaräknare enligt beskrivningen på den här webbplatsen.
Fullständigt exempel
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;
}
}
}