Delen via


Resourcebewaking

Resourcebewaking omvat de continue meting van het resourcegebruik gedurende een opgegeven periode. Het NuGet-pakket Microsoft.Extensions.Diagnostics.ResourceMonitoring biedt een verzameling API's die zijn afgestemd op het bewaken van het resourcegebruik van uw .NET-toepassingen.

De IResourceMonitor interface levert methoden voor het ophalen van realtime informatie over het gebruik van procesresources. Deze interface ondersteunt het ophalen van gegevens met betrekking tot CPU- en geheugengebruik en is momenteel compatibel met zowel Windows- als Linux-platforms. Alle diagnostische gegevens voor resourcebewaking worden standaard gepubliceerd naar OpenTelemetry, dus u hoeft deze zelf niet handmatig te publiceren.

Daarnaast rapporteert de bibliotheek voor resourcebewaking verschillende diagnostische metrische gegevens. Zie Diagnostische metrische gegevens voor meer informatie: Microsoft.Extensions.Diagnostics.ResourceMonitoring.

Voorbeeld van resourcebewaking

In het volgende voorbeeld ziet u hoe u de IResourceMonitor interface gebruikt om informatie over het CPU- en geheugengebruik van het huidige proces op te halen.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.ResourceMonitoring;
using Microsoft.Extensions.Logging;
using Spectre.Console;

var services = new ServiceCollection()
    .AddLogging(static builder => builder.AddConsole())
    .AddResourceMonitoring();

var provider = services.BuildServiceProvider();

var monitor = provider.GetRequiredService<IResourceMonitor>();

Met de voorgaande code wordt:

Belangrijk

Bij Microsoft.Extensions.Diagnostics.ResourceMonitoring het pakket wordt ervan uitgegaan dat de consument logboekregistratieproviders registreert bij het Microsoft.Extensions.Logging pakket. Als u geen logboekregistratie registreert, genereert de aanroep een AddResourceMonitoring uitzondering. Bovendien kunt u interne bibliotheeklogboekregistratie inschakelen door het Debug logboekniveau voor de Microsoft.Extensions.Diagnostics.ResourceMonitoring categorie te configureren volgens de handleiding.

Op dit moment vraagt u met de IResourceMonitor implementatie om resourcegebruik met de IResourceMonitor.GetUtilization methode. De GetUtilization methode retourneert een ResourceUtilization exemplaar dat de volgende informatie bevat:

Resourcebewaking uitbreiden met Spectre.Console

Als u dit voorbeeld uitbreidt, kunt u gebruikmaken van Spectre.Console, een goed beschouwde .NET-bibliotheek die is ontworpen om de ontwikkeling van visueel aantrekkelijke, platformoverschrijdende consoletoepassingen te vereenvoudigen. Met Spectre kunt u resourcegebruiksgegevens in tabelvorm presenteren. De volgende code illustreert het gebruik van de IResourceMonitor interface voor toegang tot details met betrekking tot het CPU- en geheugengebruik van het huidige proces en presenteert deze gegevens vervolgens in een tabel:

await StartMonitoringAsync(monitor, token);

async Task StartMonitoringAsync(IResourceMonitor monitor, CancellationToken cancellationToken)
{
    var table = new Table()
        .Centered()
        .Title("Resource Monitoring", new Style(foreground: Color.Purple, decoration: Decoration.Bold))
        .Caption("Updates every three seconds. *GTD: Guaranteed ", new Style(decoration: Decoration.Dim))
        .RoundedBorder()
        .BorderColor(Color.Cyan1)
        .AddColumns(
        [
            new TableColumn("Time").Centered(),
            new TableColumn("CPU %").Centered(),
            new TableColumn("Memory %").Centered(),
            new TableColumn("Memory (bytes)").Centered(),
            new TableColumn("GTD / Max Memory (bytes)").Centered(),
            new TableColumn("GTD / Max CPU (units)").Centered(),
        ]);

    await AnsiConsole.Live(table)
        .StartAsync(async ctx =>
        {
            var window = TimeSpan.FromSeconds(3);
            while (cancellationToken.IsCancellationRequested is false)
            {
                var utilization = monitor.GetUtilization(window);
                var resources = utilization.SystemResources;

                table.AddRow(
                    [
                        $"{DateTime.Now:T}",
                        $"{utilization.CpuUsedPercentage:p}",
                        $"{utilization.MemoryUsedPercentage:p}",
                        $"{utilization.MemoryUsedInBytes:#,#}",
                        $"{resources.GuaranteedMemoryInBytes:#,#} / {resources.MaximumMemoryInBytes:#,#}",
                        $"{resources.GuaranteedCpuUnits} / {resources.MaximumCpuUnits}",
                    ]);

                ctx.Refresh();
                await Task.Delay(window);
            }
        });

    Console.CancelKeyPress += (_, e) =>
    {
        e.Cancel = true;
        cancellationTokenSource.Cancel();
    };
}

Met de voorgaande code wordt:

  • Hiermee maakt u een annuleringstokenbron en een annuleringstoken.
  • Hiermee maakt u een nieuw Table exemplaar, configureert u het met een titel, bijschrift en kolommen.
  • Voert een live render van het Table exemplaar uit, waarbij een gemachtigde wordt doorgegeven die elke drie seconden wordt aangeroepen.
  • Hiermee haalt u de huidige resourcegebruiksgegevens van het IResourceMonitor exemplaar op en wordt deze weergegeven als een nieuwe rij in het Table exemplaar.

Hier volgt een voorbeeld van de uitvoer uit de voorgaande code:

Voorbeeld van de uitvoer van de resourcebewakings-app.

Zie het voorbeeld van resourcebewaking voor de broncode van dit voorbeeld.

Kubernetes-tests

Naast resourcebewaking rapporteren apps die bestaan in een Kubernetes-cluster hun status via diagnostische tests. Het NuGet-pakket Microsoft.Extensions.Diagnostics.Probes biedt ondersteuning voor Kubernetes-tests. Het externaliseert verschillende statuscontroles die zijn afgestemd op verschillende Kubernetes-tests, bijvoorbeeld:

  • Leeflijkheid
  • Gereedheid
  • Opstarten

De bibliotheek communiceert de huidige status van de apps naar een Kubernetes-hostingomgeving. Als een proces rapporteert dat het niet in orde is, verzendt Kubernetes het verkeer niet, waardoor de procestijd wordt opgegeven om te herstellen of te beƫindigen.

Als u ondersteuning voor Kubernetes-tests wilt toevoegen, voegt u een pakketverwijzing toe aan Microsoft.Extensions.Diagnostics.Probes. Roep op een IServiceCollection exemplaar het aan AddKubernetesProbes.

Zie ook