Delen via


Tellers voor .NET in Application Insights

Azure MonitorApplication Insights ondersteunt prestatiemeteritems en gebeurtenistellers. Deze handleiding biedt een overzicht van beide, waaronder hun doel, configuratie en gebruik in .NET-toepassingen.

Let op

We raden de Azure Monitor OpenTelemetry Distro aan voor nieuwe toepassingen of klanten om Azure Monitor Application Insights mogelijk te maken. De Azure Monitor OpenTelemetry Distro biedt een vergelijkbare functionaliteit en ervaring als de Application Insights SDK. Het is mogelijk om te migreren van de Application Insights SDK met behulp van de migratiehandleidingen voor .NET, Node.js en Python, maar we werken nog steeds aan het toevoegen van een aantal functies voor achterwaartse compatibiliteit.

Overzicht

  • Prestatiemeteritems zijn ingebouwd in het Windows-besturingssysteem en bieden vooraf gedefinieerde metrische gegevens, zoals CPU-gebruik, geheugenverbruik en schijfactiviteit. Deze tellers zijn ideaal voor het bewaken van metrische standaardprestaties met minimale instellingen. Ze helpen bij het bijhouden van resourcegebruik of het oplossen van knelpunten op systeemniveau in Windows-toepassingen, maar bieden geen ondersteuning voor aangepaste toepassingsspecifieke metrische gegevens.
  • Gebeurtenistellers werken op meerdere platforms, waaronder Windows, Linux en macOS. Hiermee kunnen ontwikkelaars lichtgewicht, aanpasbare toepassingsspecifieke metrische gegevens definiëren en bewaken, wat meer flexibiliteit biedt dan prestatiemeteritems. Gebeurtenismeteritems zijn handig wanneer metrische systeemgegevens onvoldoende zijn of wanneer gedetailleerde telemetrie nodig is in platformoverschrijdende toepassingen. Ze vereisen expliciete implementatie en configuratie, waardoor de installatie meer inspanningsintensief wordt.

Tellers configureren

Windows biedt verschillende prestatiemeteritems, zoals prestatiemeteritems die worden gebruikt voor het verzamelen van processor-, geheugen- en schijfgebruiksstatistieken. U kunt ook uw eigen prestatiemeteritems definiëren.

Uw toepassing ondersteunt het verzamelen van prestatiemeteritems als deze wordt uitgevoerd onder IIS (Internet Information Server) op een on-premises host of een virtuele machine met beheerderstoegang. Toepassingen die als Azure Web Apps worden uitgevoerd, hebben niet rechtstreeks toegang tot prestatiemeteritems, maar Application Insights verzamelt een subset van beschikbare tellers.

Vereisten

Verwijs het serviceaccount van de app-pool om prestatiemeteritems te bewaken door deze toe te voegen aan de groep Gebruikers van prestatiemeter .

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

Tellers weergeven

In het deelvenster Metrische gegevens ziet u de standaardset prestatiemeteritems.

Standaarditems voor ASP.NET webtoepassingen:

  • Percentage proces\processortijd
  • Percentage proces\genormaliseerde processortijd
  • Geheugen\Beschikbare bytes
  • ASP.NET aanvragen per seconde
  • CLR-uitzonderingen (Common Language Runtime) van .NET per seconde
  • Uitvoeringstijd van ASP.NET ApplicationsRequest
  • Proces\Privébytes
  • Verwerken\IO-gegevensbytes per seconde
  • ASP.NET toepassingen\aanvragen in de toepassingswachtrij
  • Processor(_Total)\% processortijd

Standaarditems voor ASP.NET Core-webtoepassingen:

  • Percentage proces\processortijd
  • Percentage proces\genormaliseerde processortijd
  • Geheugen\Beschikbare bytes
  • Proces\Privébytes
  • Verwerken\IO-gegevensbytes per seconde
  • Processor(_Total)\% processortijd

Tellers toevoegen

Als het gewenste prestatiemeteritem niet is opgenomen in de lijst met metrische gegevens, kunt u deze toevoegen.

  1. Ontdek welke tellers beschikbaar zijn op uw server met behulp van deze PowerShell-opdracht op de lokale server:

    Get-Counter -ListSet *
    

    Zie Get-Counter voor meer informatie.

  2. ApplicationInsights.config openen.

    Als u Application Insights tijdens de ontwikkeling aan uw app hebt toegevoegd:

    1. Bewerken ApplicationInsights.config in uw project.
    2. Implementeer deze opnieuw op uw servers.
  3. Bewerk de instructie voor de prestatieverzamelaar:

    
        <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>
    

Notitie

ASP.NET Core-toepassingen niet hebben ApplicationInsights.config, is de voorgaande methode dus niet geldig voor ASP.NET Core-toepassingen.

U legt zowel standaardtellers als tellers vast die u zelf implementeert. \Objects\Processes is een voorbeeld van een standaardteller die beschikbaar is op alle Windows-systemen. \Sales(photo)\# Items Sold is een voorbeeld van een aangepaste teller die kan worden geïmplementeerd in een webservice.

De indeling is \Category(instance)\Counter, of voor categorieën die geen exemplaren hebben, alleen \Category\Counter.

De ReportAs parameter is vereist voor tellernamen die niet overeenkomen [a-zA-Z()/-_ \.]+.

Als u een exemplaar opgeeft, wordt het een dimensie CounterInstanceName van de gerapporteerde metrische gegevens.

Prestatiemeteritems verzamelen in code voor ASP.NET webtoepassingen of .NET/.NET Core-consoletoepassingen

Als u systeemprestatiemeteritems wilt verzamelen en naar Application Insights wilt verzenden, kunt u het volgende codefragment aanpassen:

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

U kunt ook hetzelfde doen met aangepaste metrische gegevens die u hebt gemaakt:

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

Prestatiemeteritems verzamelen in code voor ASP.NET Core-webtoepassingen

Configureren PerformanceCollectorModule na de WebApplication.CreateBuilder() methode in 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();

aantal ASP.NET en Application Insights

In de volgende secties worden ASP.NET en application insights-aantallen besproken.

Prestatiemeteritems voor toepassingen die worden uitgevoerd in Azure Web Apps- en Windows-containers op Azure App Service

Zowel ASP.NET als ASP.NET Core-toepassingen die zijn geïmplementeerd in Azure Web Apps, worden uitgevoerd in een speciale sandbox-omgeving. Toepassingen die zijn geïmplementeerd in Azure-app Service kunnen gebruikmaken van een Windows-container of worden gehost in een sandbox-omgeving. Als de toepassing is geïmplementeerd in een Windows-container, zijn alle standaard prestatiemeteritems beschikbaar in de containerinstallatiekopie.

De sandbox-omgeving staat geen directe toegang tot systeemprestatiemeteritems toe. Een beperkte subset van tellers wordt echter weergegeven als omgevingsvariabelen, zoals beschreven in Prestatiemeteritems die als omgevingsvariabelen worden weergegeven. In deze omgeving is slechts een subset met tellers beschikbaar. Zie Prestatiemeteritems die als omgevingsvariabelen worden weergegeven voor de volledige lijst.

De Application Insights SDK voor ASP.NET en ASP.NET Core detecteert of code is geïmplementeerd in een web-app of een niet-Windows-container. De detectie bepaalt of prestatiemeteritems in een sandbox-omgeving worden verzameld of het standaardverzamelingsmechanisme wordt gebruikt wanneer deze wordt gehost op een Windows-container of virtuele machine.

Prestatiemeteritems in ASP.NET Core-toepassingen

Ondersteuning voor prestatiemeteritems in ASP.NET Core is beperkt:

  • SDK-versies 2.4.1 en hoger verzamelen prestatiemeteritems als de toepassing wordt uitgevoerd in Azure Web Apps (Windows).
  • SDK-versies 2.7.1 en hoger verzamelen prestatiemeteritems als de toepassing wordt uitgevoerd in Windows en doelen NETSTANDARD2.0 of hoger.
  • Voor toepassingen die zijn gericht op .NET Framework, bieden alle versies van de SDK ondersteuning voor prestatiemeteritems.
  • SDK-versies 2.8.0 en hoger ondersteunen het CPU-/geheugenmeteritem in Linux. Er wordt geen andere teller ondersteund in Linux. Gebruik gebeurtenistellers om systeemtellers op te halen in Linux (en andere niet-Windows-omgevingen).

Log Analytics-query's

U kunt rapporten van prestatiemeteritems zoeken en weergeven in Log Analytics.

Het performanceCounters-schema toont de category, counter naam en instance naam van elke prestatiemeteritem. In de telemetrie voor elke toepassing ziet u alleen de tellers voor die toepassing. Als u bijvoorbeeld wilt zien welke tellers beschikbaar zijn:

performanceCounters | summarize count(), avg(value) by category, instance, counter

Instance Hier verwijst u naar het prestatiemeteritemexemplaren, niet de rol of het servercomputerexemplaren. De naam van het exemplaar van het prestatiemeteritem segmenten, zoals processortijd, op basis van de naam van het proces of de toepassing.

Een grafiek met het beschikbare geheugen in de afgelopen periode ophalen:

performanceCounters | where counter == "Available Bytes" | summarize avg(value), min(value) by bin(timestamp, 1h) | render timechart

Net als andere telemetrie heeft performanceCounters ook een kolom cloud_RoleInstance die de identiteit aangeeft van het hostserverexemplaren waarop uw app wordt uitgevoerd. Als u bijvoorbeeld de prestaties van uw app op de verschillende computers wilt vergelijken:

performanceCounters | where counter == "% Processor Time" and instance == "SendMetrics" | summarize avg(value) by cloud_RoleInstance, bin(timestamp, 1d)

Waarschuwingen

Net als andere metrische gegevens kunt u een waarschuwing instellen om te waarschuwen als een teller buiten een opgegeven limiet valt.

Als u een waarschuwing wilt instellen, opent u het deelvenster Waarschuwingen en selecteert u Waarschuwing toevoegen.

Veelgestelde vragen

Wat is het verschil tussen de metrische gegevens voor uitzonderingsfrequentie en Uitzonderingen?

  • Exception rate: De uitzonderingsfrequentie is een prestatiemeteritem van het systeem. De CLR telt alle verwerkte en niet-verwerkte uitzonderingen die worden gegenereerd en verdeelt het totaal in een steekproefinterval door de lengte van het interval. Met de Application Insights SDK wordt dit resultaat verzameld en naar de portal verzonden.
  • Exceptions: De metrische gegevens uitzonderingen tellen de TrackException rapporten die door de portal zijn ontvangen in het steekproefinterval van de grafiek. Het bevat alleen de afgehandelde uitzonderingen waar u aanroepen in uw code schrijft TrackException . Het bevat niet alle niet-verwerkte uitzonderingen.