Sdílet prostřednictvím


Monitorování prostředků

Monitorování prostředků zahrnuje průběžné měření využití prostředků v zadaném období. Balíček NuGet Microsoft.Extensions.Diagnostics.ResourceMonitoring nabízí kolekci rozhraní API přizpůsobená pro monitorování využití prostředků vašich aplikací .NET.

Rozhraní IResourceMonitor poskytuje metody pro načítání informací v reálném čase týkajících se využití prostředků procesu. Toto rozhraní podporuje načítání dat souvisejících s využitím procesoru a paměti a je v současné době kompatibilní s platformami Windows i Linux. Všechny diagnostické informace monitorování prostředků se ve výchozím nastavení publikují do OpenTelemetry, takže není nutné je publikovat ručně.

Knihovna monitorování prostředků navíc hlásí různé diagnostické metriky. Další informace najdete v tématu Diagnostické metriky: Microsoft.Extensions.Diagnostics.ResourceMonitoring.

Příklad využití monitorování prostředků

Následující příklad ukazuje, jak pomocí IResourceMonitor rozhraní načíst informace o využití procesoru a paměti aktuálního procesu.

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>();

Předchozí kód:

Důležité

Tento Microsoft.Extensions.Diagnostics.ResourceMonitoring balíček předpokládá, že příjemce zaregistruje poskytovatele protokolování v Microsoft.Extensions.Logging balíčku. Pokud protokolování nezaregistrujete, volání AddResourceMonitoring vyvolá výjimku. Kromě toho můžete povolit protokolování interní knihovny tak, že nakonfigurujete Debug úroveň protokolu pro Microsoft.Extensions.Diagnostics.ResourceMonitoring kategorii podle průvodce.

V tomto okamžiku budete s implementací IResourceMonitor žádat o využití prostředků s metodou IResourceMonitor.GetUtilization . Metoda GetUtilization vrátí ResourceUtilization instanci, která obsahuje následující informace:

Rozšíření monitorování prostředků pomocí nástroje Spectre.Console

Rozšířením tohoto příkladu můžete využít Spectre.Console, dobře považovanou knihovnu .NET, která je navržená tak, aby zjednodušila vývoj vizuálně atraktivních konzolových aplikací pro různé platformy. Pomocí nástroje Spectre budete moct prezentovat data o využití prostředků v tabulkovém formátu. Následující kód znázorňuje použití IResourceMonitor rozhraní pro přístup k podrobnostem o využití procesoru a paměti aktuálního procesu a následné prezentaci těchto dat v tabulce:

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();
    };
}

Předchozí kód:

  • Vytvoří zdroj tokenu zrušení a token zrušení.
  • Vytvoří novou Table instanci a nakonfiguruje ji s názvem, titulkem a sloupci.
  • Provede živé vykreslení Table instance a předá delegáta, který se vyvolá každé tři sekundy.
  • Získá aktuální informace o využití prostředků z IResourceMonitor instance a zobrazí je jako nový řádek v Table instanci.

Následuje příklad výstupu z předchozího kódu:

Příklad výstupu aplikace pro monitorování prostředků

Zdrojový kód tohoto příkladu najdete v ukázce monitorování prostředků.

Sondy Kubernetes

Kromě monitorování prostředků hlásí aplikace, které existují v clusteru Kubernetes, svůj stav prostřednictvím diagnostických sond. Balíček NuGet Microsoft.Extensions.Diagnostics.Probes poskytuje podporu pro sondy Kubernetes. Externalizuje různé kontroly stavu, které odpovídají různým sondám Kubernetes, například:

  • Životnost
  • Připravenost
  • Spuštění

Knihovna komunikuje aktuální stav aplikací s hostitelským prostředím Kubernetes. Pokud proces hlásí, že není v pořádku, Kubernetes ho neodesílá žádný provoz a poskytuje dobu obnovení nebo ukončení procesu.

Pokud chcete přidat podporu sond Kubernetes, přidejte odkaz na balíček Microsoft.Extensions.Diagnostics.Probes. IServiceCollection V instanci zavolejte AddKubernetesProbes.

Viz také