Eventi
17 mar, 21 - 21 mar, 10
Partecipa alla serie meetup per creare soluzioni di intelligenza artificiale scalabili basate su casi d'uso reali con altri sviluppatori ed esperti.
Esegui registrazioneQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare le funzionalità più recenti, gli aggiornamenti della sicurezza e il supporto tecnico.
Il monitoraggio delle risorse implica la misurazione continua dell'utilizzo delle risorse in un periodo specificato. Il pacchetto NuGet Microsoft.Extensions.Diagnostics.ResourceMonitoring offre una raccolta di API personalizzate per il monitoraggio dell'utilizzo delle risorse delle applicazioni .NET.
L'interfaccia IResourceMonitor fornisce metodi per il recupero di informazioni in tempo reale relative all'utilizzo delle risorse del processo. Questa interfaccia supporta il recupero dei dati correlati all'utilizzo della CPU e della memoria ed è attualmente compatibile con le piattaforme Windows e Linux. Tutte le informazioni di diagnostica del monitoraggio delle risorse vengono pubblicate in OpenTelemetry per impostazione predefinita, quindi non è necessario pubblicarle manualmente.
Inoltre, la libreria di monitoraggio delle risorse riporta varie metriche di diagnostica. Per altre informazioni, vedere Metriche di diagnostica: Microsoft.Extensions.Diagnostics.ResourceMonitoring
.
L'esempio seguente illustra come usare l'interfaccia IResourceMonitor
per recuperare informazioni sull'utilizzo della CPU e della memoria del processo corrente.
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>();
Il codice precedente:
ServiceCollection
.ServiceProvider
.Importante
Il pacchetto Microsoft.Extensions.Diagnostics.ResourceMonitoring presuppone che il consumer registrerà i provider di registrazione con il pacchetto Microsoft.Extensions.Logging
. Se non si registra la registrazione, la chiamata a AddResourceMonitoring
genererà un'eccezione. Inoltre, è possibile abilitare la registrazione della libreria interna configurando il Debug
livello di log per la Microsoft.Extensions.Diagnostics.ResourceMonitoring
categoria in base alla guida.
A questo punto, con l'implementazione di IResourceMonitor
si chiederà l'utilizzo delle risorse con il metodo IResourceMonitor.GetUtilization. Il metodo GetUtilization
restituisce un'istanza ResourceUtilization che contiene le informazioni seguenti:
Estendendo questo esempio, è possibile sfruttare Spectre.Console, una libreria .NET affidabile e progettata per semplificare lo sviluppo di applicazioni console multipiattaforma dall'aspetto accattivante. Con Spectre, sarà possibile presentare i dati di utilizzo delle risorse in un formato tabulare. Il codice seguente illustra l'utilizzo dell'interfaccia IResourceMonitor
per accedere ai dettagli relativi all'utilizzo della CPU e della memoria del processo corrente, quindi presentando questi dati in una tabella:
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();
};
}
Il codice precedente:
Table
, configurandola con un titolo, un didascalia e colonne.Table
, passando un delegato che verrà richiamato ogni tre secondi.IResourceMonitor
e le visualizza come nuova riga nell'istanza Table
.Segue un esempio di output dal codice precedente:
Per il codice sorgente di questo esempio, vedereCampione di monitoraggio delle risorse.
Oltre al monitoraggio delle risorse, le app esistenti all'interno di un cluster Kubernetes segnalano l'integrità tramite probe di diagnostica. Il pacchetto NuGet Microsoft.Extensions.Diagnostics.Probes fornisce supporto per i probe Kubernetes. Esterna i vari controlli di integrità allineati a vari probe Kubernetes, ad esempio:
La libreria comunica l'integrità corrente delle app a un ambiente di hosting Kubernetes. Se un processo risulta essere non integro, Kubernetes non invia traffico a esso, fornendo il tempo di elaborazione per il ripristino o l'interruzione.
Per aggiungere il supporto per i probe Kubernetes, aggiungere un riferimento al pacchetto a Microsoft.Extensions.Diagnostics.Probes. In un'istanza IServiceCollection, chiamare AddKubernetesProbes.
Feedback su .NET
.NET è un progetto open source. Seleziona un collegamento per fornire feedback:
Eventi
17 mar, 21 - 21 mar, 10
Partecipa alla serie meetup per creare soluzioni di intelligenza artificiale scalabili basate su casi d'uso reali con altri sviluppatori ed esperti.
Esegui registrazioneTraining
Modulo
Implementare l'osservabilità in un'applicazione nativa del cloud .NET con OpenTelemetry - Training
Informazioni sull'osservabilità e su come implementarla in un'applicazione nativa del cloud. Usare i pacchetti OpenTelemetry per restituire log, metriche e dati di traccia e analizzare i dati in Application Insights e nelle applicazioni di terze parti.
Documentazione
Raccogliere le metriche - .NET
Esercitazione per raccogliere le metriche nelle applicazioni .NET
Come aggiungere nuove metriche a una libreria o a un'applicazione .NET
Panoramica delle metriche - .NET
Panoramica sull'uso delle metriche per monitorare un'applicazione .NET