Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge durch, um die neuesten Features, Sicherheitsupdates und den technischen Support zu nutzen.
Die Ressourcenüberwachung umfasst die kontinuierliche Messung der Ressourcenauslastung über einen bestimmten Zeitraum. Das NuGet-Paket Microsoft.Extensions.Diagnostics.ResourceMonitoring bietet eine Sammlung von APIs, die auf die Überwachung der Ressourcenauslastung von .NET-Anwendungen zugeschnitten sind.
Die IResourceMonitor-Schnittstelle enthält Methoden zum Abrufen von Echtzeitinformationen zur Prozessressourcennutzung. Diese Schnittstelle unterstützt das Abrufen von Daten im Zusammenhang mit der CPU- und Arbeitsspeicherauslastung und ist derzeit mit Windows- und Linux-Plattformen kompatibel. Alle Diagnoseinformationen zur Ressourcenüberwachung werden standardmäßig in OpenTelemetry veröffentlicht. Daher müssen sie nicht manuell veröffentlicht werden.
Darüber hinaus meldet die Ressourcenüberwachungsbibliothek verschiedene Diagnosemetriken. Weitere Informationen finden Sie unter Diagnosemetriken: Microsoft.Extensions.Diagnostics.ResourceMonitoring
.
Im folgenden Beispiel wird veranschaulicht, wie die IResourceMonitor
-Schnittstelle zum Abrufen von Informationen zur CPU- und Arbeitsspeicherauslastung des aktuellen Prozesses verwendet wird.
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>();
Der vorangehende Code:
ServiceCollection
-Instanz.ServiceProvider
-Instanz ab.Wichtig
Das Microsoft.Extensions.Diagnostics.ResourceMonitoring-Paket geht davon aus, dass der Consumer die Protokollierungsanbieter beim Microsoft.Extensions.Logging
-Paket registriert. Wenn die Protokollierung nicht registriert wird, löst der Aufruf von AddResourceMonitoring
eine Ausnahme aus. Darüber hinaus können Sie die interne Bibliotheksprotokollierung aktivieren, indem Sie die Debug
Protokollebene für die Microsoft.Extensions.Diagnostics.ResourceMonitoring
Kategorie entsprechend der Anleitung konfigurieren.
An diese Stelle fragen Sie bei der IResourceMonitor
-Implementierung mit der IResourceMonitor.GetUtilization-Methode nach der Ressourcenauslastung. Die GetUtilization
-Methode gibt eine ResourceUtilization-Instanz zurück, die folgende Informationen enthält:
Wenn Sie dieses Beispiel erweitern, können Sie Spectre.Console nutzen, eine bewährte .NET-Bibliothek, die die Entwicklung visuell ansprechender, plattformübergreifender Konsolenanwendungen vereinfacht. Mit Spectre können Sie Ressourcenauslastungsdaten in einem tabellarischen Format darstellen. Der folgende Code veranschaulicht die Verwendung der IResourceMonitor
-Schnittstelle für den Zugriff auf Details zur CPU- und Arbeitsspeicherauslastung des aktuellen Prozesses und stellt diese Daten dann in einer Tabelle dar:
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();
};
}
Der vorangehende Code:
Table
-Instanz, die mit einem Titel, einer Beschriftung und Spalten konfiguriert wird.Table
-Instanz durch, wobei ein Delegat übergeben wird, der alle drei Sekunden aufgerufen wird.IResourceMonitor
-Instanz ab und zeigt sie als neue Zeile in der Table
-Instanz an.Es folgt ein Beispiel für die Ausgabe des voranstehenden Codes:
Den Quellcode dieses Beispiels finden Sie im Beispiel zur Ressourcenüberwachung.
Neben der Ressourcenüberwachung melden Apps, die in einem Kubernetes-Cluster vorhanden sind, ihre Integrität über Diagnosetests. Das NuGet-Paket Microsoft.Extensions.Diagnostics.Probes bietet Unterstützung für Kubernetes-Tests. Es externalisiert verschiedene Integritätsprüfungen, die an verschiedenen Kubernetes-Tests ausgerichtet sind, z. B.:
Die Bibliothek informiert eine Kubernetes-Hostingumgebung über die aktuelle Integrität der Apps. Wenn ein Prozess als fehlerhaft gemeldet wird, sendet Kubernetes keinen Datenverkehr an ihn, und stellt Prozesszeit für die Wiederherstellung oder Beendigung bereit.
Um Unterstützung für Kubernetes-Tests hinzuzufügen, fügen Sie einen Paketverweis auf Microsoft.Extensions.Diagnostics.Probes hinzu. Rufen Sie in einer IServiceCollection-Instanz AddKubernetesProbes auf.
Feedback zu .NET
.NET ist ein Open Source-Projekt. Wählen Sie einen Link aus, um Feedback zu geben:
Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenTraining
Modul
Implementieren der Einblicke in einer cloudnativen .NET-Anwendung mit OpenTelemetry - Training
Erfahren Sie mehr über Einblicke und wie Sie diese in einer cloudnativen Anwendung implementieren. Verwenden Sie OpenTelemetry-Pakete, um Protokolle, Metriken und Ablaufverfolgungsdaten auszugeben und die Daten in Application Insights und Anwendungen von Drittanbietern zu analysieren.
Dokumentation
Sammeln von Metriken – .NET - .NET
Tutorial zum Sammeln von Metriken in .NET-Anwendungen
Übersicht über Metriken - .NET
Übersicht über die Verwendung von Metriken zum Überwachen einer .NET-Anwendung
Grundlegendes zu den verschiedenen Metrik-APIs - .NET
Eine Anleitung zu den verschiedenen Metrik-APIs, die von .NET und Drittanbietern angeboten werden.