Megosztás a következőn keresztül:


Erőforrás-figyelés

Az erőforrás-monitorozás magában foglalja az erőforrás-kihasználtság folyamatos mérését egy adott időszakban. A Microsoft.Extensions.Diagnostics.ResourceMonitoring NuGet csomag a .NET-alkalmazások erőforrás-kihasználtságának figyelésére szabott API-k gyűjteményét kínálja.

Az IResourceMonitor interfész metódusokat biztosít a folyamaterőforrás-kihasználtsággal kapcsolatos valós idejű információk lekéréséhez. Ez a felület támogatja a processzor- és memóriahasználattal kapcsolatos adatok lekérését, és jelenleg windowsos és linuxos platformokkal is kompatibilis. Alapértelmezés szerint minden erőforrásmonitorozási diagnosztikai információ közzé van téve az OpenTelemetryben, így ezt nem kell manuálisan közzétennie.

Az erőforrásmonitorozási kódtár emellett különböző diagnosztikai metrikákat is jelent. További információ: Diagnosztikai metrikák: Microsoft.Extensions.Diagnostics.ResourceMonitoring.

Példa erőforrás-figyelési használatra

Az alábbi példa bemutatja, hogyan használható az interfész az IResourceMonitor aktuális folyamat processzor- és memóriahasználatával kapcsolatos információk lekérésére.

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

A fenti kód a következőket végzi el:

Fontos

A Microsoft.Extensions.Diagnostics.ResourceMonitoring csomag feltételezi, hogy a fogyasztó regisztrálja a naplózási szolgáltatókat a Microsoft.Extensions.Logging csomagban. Ha nem regisztrál naplózást, a hívás kivételt fog eredményezni AddResourceMonitoring . Emellett engedélyezheti a belső kódtár-naplózást a kategória naplószintjének DebugMicrosoft.Extensions.Diagnostics.ResourceMonitoring konfigurálásával az útmutatónak megfelelően.

Ezen a ponton az IResourceMonitor implementációval erőforrás-kihasználtságot kell kérnie a IResourceMonitor.GetUtilization metódussal. A GetUtilization metódus a következő információkat tartalmazó példányt ResourceUtilization ad vissza:

Erőforrás-figyelés kiterjesztése a Spectre.Console használatával

A példán túl használhatja a Spectre.Console nevű, jól ismert .NET-kódtárat, amely a vizuálisan vonzó, platformfüggetlen konzolalkalmazások fejlesztését egyszerűsíti. A Spectre használatával táblázatos formátumban jelenítheti meg az erőforrás-kihasználtsági adatokat. Az alábbi kód bemutatja, hogy a IResourceMonitor felület milyen módon fér hozzá az aktuális folyamat processzor- és memóriahasználatának részleteihez, majd megjeleníti ezeket az adatokat egy táblázatban:

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

A fenti kód a következőket végzi el:

  • Létrehoz egy lemondási jogkivonat forrását és egy lemondási jogkivonatot.
  • Létrehoz egy új Table példányt, amely címmel, felirattal és oszlopokkal konfigurálja azt.
  • Végrehajtja a Table példány élő renderelését, amely egy három másodpercenként meghívandó meghatalmazotton halad át.
  • Lekéri a példány aktuális IResourceMonitor erőforrás-kihasználtsági adatait, és új sorként jeleníti meg a Table példányban.

Az alábbi példa az előző kód kimenetére mutat be példát:

Példa erőforrásmonitorozási alkalmazás kimenete.

A példában szereplő forráskódért tekintse meg az erőforrás-figyelési mintát.

Kubernetes-mintavételek

Az erőforrás-monitorozás mellett a Kubernetes-fürtön belüli alkalmazások diagnosztikai mintavételekkel jelentik az állapotukat. A Microsoft.Extensions.Diagnostics.Probes NuGet csomag támogatja a Kubernetes-mintavételeket. Különböző állapotellenőrzéseket végez, amelyek különböző Kubernetes-mintavételekhez igazodnak, például:

  • Élőség
  • Készenlét
  • Indítás

A kódtár közli az alkalmazások aktuális állapotát egy Kubernetes üzemeltetési környezettel. Ha egy folyamat nem megfelelő állapotúnak minősül, a Kubernetes nem küld neki forgalmat, így a folyamat helyreállítása vagy leállítása időt biztosít.

A Kubernetes-mintavételek támogatásának hozzáadásához adjon hozzá egy csomaghivatkozást a Microsoft.Extensions.Diagnostics.Probes szolgáltatáshoz. IServiceCollection Egy példányon hívja meg a .AddKubernetesProbes

Lásd még