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:
- Vytvoří instanci nové ServiceCollection instance, zřetězí volání AddLogging metod rozšíření a AddResourceMonitoring metod.
- Vytvoří novou ServiceProvider instanci z
ServiceCollection
instance. - Získá instanci IResourceMonitor rozhraní z
ServiceProvider
instance.
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:
- ResourceUtilization.CpuUsedPercentage: Využití procesoru v procentech.
- ResourceUtilization.MemoryUsedPercentage: Využití paměti v procentech.
- ResourceUtilization.MemoryUsedInBytes: Využití paměti v bajtech.
- ResourceUtilization.SystemResources: Systémové prostředky.
- SystemResources.GuaranteedMemoryInBytes: Zaručená paměť v bajtech.
- SystemResources.MaximumMemoryInBytes: Maximální velikost paměti v bajtech.
- SystemResources.GuaranteedCpuUnits: Garantovaný procesor v jednotkách.
- SystemResources.MaximumCpuUnits: Maximální využití procesoru v jednotkách.
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 vTable
instanci.
Následuje příklad výstupu z předchozího kódu:
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.