Systemprestandaräknare i Application Insights

Windows tillhandahåller en mängd olika prestandaräknare, till exempel de som används för att samla in statistik för processor, minne och diskanvändning. Du kan också definiera dina egna prestandaräknare.

Insamling av prestandaräknare stöds om ditt program körs under IIS på en lokal värd eller är en virtuell dator som du har administrativ åtkomst till. Även om program som körs som Azure Web Apps inte har direkt åtkomst till prestandaräknare, samlas en delmängd av tillgängliga räknare in av Application Insights.

Kommentar

Följande dokumentation förlitar sig på det klassiska API:et Application Insights. Den långsiktiga planen för Application Insights är att samla in data med OpenTelemetry. Mer information finns i Aktivera Azure Monitor OpenTelemetry för .NET-, Node.js-, Python- och Java-program.

Förutsättningar

Ge apppooltjänstkontot behörighet att övervaka prestandaräknare genom att lägga till det i gruppen Användare av prestandaövervakare.

net localgroup "Performance Monitor Users" /add "IIS APPPOOL\NameOfYourPool"

Visa räknare

Fönstret Mått visar standarduppsättningen med prestandaräknare.

Screenshot that shows performance counters reported in Application Insights.

Aktuella standardräknare för ASP.NET webbprogram:

  • % process\processortid
  • % process\Processortid normaliserad
  • Minne\Tillgängliga byte
  • ASP.NET begäranden per sekund
  • .NET CLR-undantag som genereras/sek
  • ASP.NET ApplicationsRequest-körningstid
  • Process\Privata byte
  • Bearbeta\I/O-databyte per sekund
  • ASP.NET program\Begäranden i programkö
  • Processor(_Total)\% processortid

Aktuella standardräknare som samlats in för ASP.NET Core-webbprogram:

  • % process\processortid
  • % process\Processortid normaliserad
  • Minne\Tillgängliga byte
  • Process\Privata byte
  • Bearbeta\I/O-databyte per sekund
  • Processor(_Total)\% processortid

Lägg till räknare

Om prestandaräknaren du vill använda inte ingår i listan med mått kan du lägga till den.

  1. Ta reda på vilka räknare som är tillgängliga på servern med hjälp av det här PowerShell-kommandot på den lokala servern:

    Get-Counter -ListSet *
    

    Mer information finns i Get-Counter.

  2. Öppna ApplicationInsights.config.

    Om du lade till Application Insights i din app under utvecklingen:

    1. Redigera ApplicationInsights.config i projektet.
    2. Distribuera om den till dina servrar.
  3. Redigera direktivet för prestandainsamlare:

    
        <Add Type="Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector">
          <Counters>
            <Add PerformanceCounter="\Objects\Processes"/>
            <Add PerformanceCounter="\Sales(photo)\# Items Sold" ReportAs="Photo sales"/>
          </Counters>
        </Add>
    

Kommentar

ASP.NET Core-program har ApplicationInsights.configinte , så föregående metod är inte giltig för ASP.NET Core-program.

Du kan samla in både standardräknare och räknare som du har implementerat själv. \Objects\Processes är ett exempel på en standardräknare som är tillgänglig i alla Windows-system. \Sales(photo)\# Items Sold är ett exempel på en anpassad räknare som kan implementeras i en webbtjänst.

Formatet är \Category(instance)\Counter, eller för kategorier som inte har instanser, bara \Category\Counter.

Parametern ReportAs krävs för räknarnamn som inte matchar [a-zA-Z()/-_ \.]+. Det innebär att de innehåller tecken som inte finns i följande uppsättningar: bokstäver, runda hakparenteser, snedstreck, bindestreck, understreck, blanksteg och punkt.

Om du anger en instans samlas den in som en dimension CounterInstanceName av det rapporterade måttet.

Samla in prestandaräknare i kod för ASP.NET webbprogram eller .NET/.NET Core-konsolprogram

Om du vill samla in systemprestandaräknare och skicka dem till Application Insights kan du anpassa följande kodfragment:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Process([replace-with-application-process-name])\Page Faults/sec", "PageFaultsPerfSec"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Eller så kan du göra samma sak med anpassade mått som du skapade:

    var perfCollectorModule = new PerformanceCollectorModule();
    perfCollectorModule.Counters.Add(new PerformanceCounterCollectionRequest(
      @"\Sales(photo)\# Items Sold", "Photo sales"));
    perfCollectorModule.Initialize(TelemetryConfiguration.Active);

Samla in prestandaräknare i kod för ASP.NET Core-webbprogram

Konfigurera PerformanceCollectorModule efter WebApplication.CreateBuilder() -metoden i Program.cs:

using Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddApplicationInsightsTelemetry();

// The following configures PerformanceCollectorModule.

builder.Services.ConfigureTelemetryModule<PerformanceCollectorModule>((module, o) =>
    {
        // The application process name could be "dotnet" for ASP.NET Core self-hosted applications.
        module.Counters.Add(new PerformanceCounterCollectionRequest(@"\Process([replace-with-application-process-name])\Page Faults/sec", "DotnetPageFaultsPerfSec"));
    });

var app = builder.Build();

Prestandaräknare i Log Analytics

Du kan söka efter och visa prestandaräknarrapporter i Log Analytics.

PerformanceCounters-schemat visar category, counter namn och instance namn på varje prestandaräknare. I telemetrin för varje program ser du bara räknare för det programmet. Om du till exempel vill se vilka räknare som är tillgängliga:

Screenshot that shows performance counters in Application Insights analytics.

Instance Här refererar till prestandaräknarens instans, inte rollen eller serverdatorinstansen. Prestandaräknarens instansnamn segmentar vanligtvis räknare, till exempel processortid, efter namnet på processen eller programmet.

Så här hämtar du ett diagram över tillgängligt minne under den senaste perioden:

Screenshot that shows a memory time chart in Application Insights analytics.

Precis som andra telemetrier har performanceCounters också en kolumn cloud_RoleInstance som anger identiteten för den värdserverinstans som appen körs på. Om du till exempel vill jämföra appens prestanda på de olika datorerna:

Screenshot that shows performance segmented by role instance in Application Insights analytics.

ASP.NET och Application Insights räknas

I nästa avsnitt beskrivs antalet ASP.NET och Application Insights.

Vad är skillnaden mellan måtten Undantag och Undantag?

  • Exception rate: Undantagsfrekvensen är en systemprestandaräknare. CLR räknar alla hanterade och ohanterade undantag som genereras och delar summan i ett samplingsintervall med intervallets längd. Application Insights SDK samlar in det här resultatet och skickar det till portalen.
  • Exceptions: Måttet Undantag är ett antal rapporter som TrackException tas emot av portalen i diagrammets samplingsintervall. Den innehåller endast hanterade undantag där du har skrivit TrackException anrop i koden. Den innehåller inte alla ohanterade undantag.

Prestandaräknare för program som körs i Azure Web Apps och Windows-containrar på Azure App Service

Både ASP.NET och ASP.NET Core-program som distribueras till Azure Web Apps körs i en speciell sandbox-miljö. Program som distribueras till Azure App Service kan använda en Windows-container eller finnas i en sandbox-miljö. Om programmet distribueras i en Windows-container är alla standardprestandaräknare tillgängliga i containeravbildningen.

Sandbox-miljön tillåter inte direkt åtkomst till systemprestandaräknare. En begränsad delmängd av räknare exponeras dock som miljövariabler enligt beskrivningen i Perf-räknare som exponeras som miljövariabler. Endast en delmängd av räknare är tillgänglig i den här miljön. Den fullständiga listan finns i Perf-räknare som exponeras som miljövariabler.

Application Insights SDK för ASP.NET och ASP.NET Core identifierar om kod distribueras till en webbapp eller en container som inte är Windows. Identifieringen avgör om den samlar in prestandaräknare i en sandbox-miljö eller använder standardsamlingsmekanismen när den finns på en Windows-container eller virtuell dator.

Prestandaräknare i ASP.NET Core-program

Stöd för prestandaräknare i ASP.NET Core är begränsat:

  • SDK-versionerna 2.4.1 och senare samlar in prestandaräknare om programmet körs i Azure Web Apps (Windows).
  • SDK version 2.7.1 och senare samlar in prestandaräknare om programmet körs i Windows och mål NETSTANDARD2.0 eller senare.
  • För program som riktar sig till .NET Framework stöder alla versioner av SDK prestandaräknare.
  • SDK-versionerna 2.8.0 och senare stöder processor-/minnesräknaren i Linux. Ingen annan räknare stöds i Linux. Om du vill hämta systemräknare i Linux (och andra icke-Windows-miljöer) använder du EventCounters.

Aviseringar

Precis som andra mått kan du ange en avisering för att varna dig om en prestandaräknare går utanför en gräns som du anger. Om du vill ange en avisering öppnar du fönstret Aviseringar och väljer Lägg till avisering.

Nästa steg