Application Insights pro konzolové aplikace .NET
Upozornění
Pro konzolové aplikace použijte balíček Microsoft.ApplicationInsights.WorkerService a přidružené pokyny z Application Insights pro aplikace pracovních procesů (aplikace jiné než HTTP). Je kompatibilní s verzemi dlouhodobé podpory (LTS) rozhraní .NET Core a .NET Framework nebo novějšími.
Application Insights umožňuje monitorovat dostupnost, výkon a využití webové aplikace.
Začínáme
V Azure Portal vytvořte prostředek Application Insights.
Pořiďte kopii připojovacího řetězce. Připojovací řetězec vyhledejte v rozevíracím seznamu Základy nového prostředku, který jste vytvořili.
Nainstalujte nejnovější balíček Microsoft.ApplicationInsights .
Před sledováním jakékoli telemetrie (nebo
APPLICATIONINSIGHTS_CONNECTION_STRING
nastavením proměnné prostředí) nastavte v kódu připojovací řetězec. Potom byste měli být schopni ručně sledovat telemetrii a zobrazovat ji v 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!");
Poznámka
Telemetrie se neodesílají okamžitě. Položky jsou dávkově odesílány sadou ApplicationInsights SDK. Aplikace konzoly se ukončí po volání
Track()
metod.Telemetrická data se nemusí odesílat, pokud
Flush()
se aplikace ukončí, aDelay
Sleep
/pokud se neskončí, jak je znázorněno v úplném příkladu dále v tomto článku.Sleep
není potřeba, pokud používáteInMemoryChannel
.Nainstalujte nejnovější verzi balíčku Microsoft.ApplicationInsights.DependencyCollector . Automaticky sleduje volání HTTP, SQL nebo některé jiné externí závislosti.
Application Insights můžete inicializovat a konfigurovat z kódu nebo pomocí ApplicationInsights.config
souboru . Ujistěte se, že inicializace probíhá co nejdříve.
Poznámka
aplikace .NET Core nepodporujíApplicationInsights.config.
Použití konfiguračního souboru
V případě aplikací založených na rozhraní .NET Framework sada Application Insights SDK ve TelemetryConfiguration
výchozím nastavení hledá ApplicationInsights.config
při vytváření soubor v pracovním adresáři. Čtení konfiguračního souboru není v .NET Core podporované.
TelemetryConfiguration config = TelemetryConfiguration.Active; // Reads ApplicationInsights.config file if present
Můžete také zadat cestu ke konfiguračnímu souboru:
using System.IO;
TelemetryConfiguration configuration = TelemetryConfiguration.CreateFromConfiguration(File.ReadAllText("C:\\ApplicationInsights.config"));
var telemetryClient = new TelemetryClient(configuration);
Úplný příklad konfiguračního souboru získáte instalací nejnovější verze balíčku Microsoft.ApplicationInsights.WindowsServer . Tady je minimální konfigurace pro shromažďování závislostí, která je ekvivalentní příkladu kódu:
<?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>
Konfigurace shromažďování telemetrie z kódu
Poznámka
Čtení konfiguračního souboru není v .NET Core podporované.
Během spouštění aplikace vytvořte a nakonfigurujte
DependencyTrackingTelemetryModule
instanci. Musí být jednoúčelový a musí být zachován po celou dobu životnosti aplikace.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);
Přidejte běžné inicializátory telemetrie:
// ensures proper DependencyTelemetry.Type is set for Azure RESTful API calls configuration.TelemetryInitializers.Add(new HttpDependenciesParsingTelemetryInitializer());
Pokud jste vytvořili konfiguraci pomocí prostého
TelemetryConfiguration()
konstruktoru, musíte navíc povolit podporu korelace. Není potřeba, pokud jste načetli konfiguraci ze souboru nebo použiliTelemetryConfiguration.CreateDefault()
neboTelemetryConfiguration.Active
.configuration.TelemetryInitializers.Add(new OperationCorrelationTelemetryInitializer());
Můžete také nainstalovat a inicializovat modul kolektoru čítače výkonu, jak je popsáno na tomto webu.
Úplný příklad
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;
}
}
}