Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- Új példány példányosítása ServiceCollection , a hívások és a AddLoggingAddResourceMonitoring bővítménymetelyek összekapcsolása.
- Új ServiceProvider példányt hoz létre a
ServiceCollection
példányból. - Lekéri a IResourceMonitor felület egy példányát a
ServiceProvider
példányból.
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 Debug
Microsoft.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:
- ResourceUtilization.CpuUsedPercentage: CPU-használat százalékban.
- ResourceUtilization.MemoryUsedPercentage: Memóriahasználat százalékban.
- ResourceUtilization.MemoryUsedInBytes: Memóriahasználat bájtban.
-
ResourceUtilization.SystemResources: Rendszererőforrások.
- SystemResources.GuaranteedMemoryInBytes: Garantált memória bájtban.
- SystemResources.MaximumMemoryInBytes: Maximális memória bájtban.
- SystemResources.GuaranteedCpuUnits: Garantált processzoregységekben.
- SystemResources.MaximumCpuUnits: Maximális processzorhasználat egységekben.
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 aTable
példányban.
Az alábbi példa az előző kód kimenetére mutat be példát:
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