Condividi tramite


Orleans Pannello di controllo

Il Orleans dashboard è uno strumento di monitoraggio predefinito basato sul Web che offre visibilità in tempo reale nel Orleans cluster. Consente di monitorare l'integrità del silo, le attivazioni granulari, le chiamate ai metodi, i promemoria e le metriche di sistema senza richiedere l'infrastruttura di monitoraggio esterna.

Importante

Questa funzionalità è disponibile a partire dalla Orleans versione 10.0. È attualmente in anteprima e può cambiare nelle versioni future.

Funzionalità

Il Orleans dashboard offre le funzionalità seguenti:

  • Panoramica del cluster: visualizzare tutti i silo nel cluster con lo stato, il tempo di attività e l'utilizzo delle risorse.
  • Monitoraggio granulare: tenere traccia delle attivazioni granulari, delle chiamate ai metodi e delle metriche delle prestazioni per tipo di granularità.
  • Profilatura dei metodi: analizzare la frequenza delle chiamate al metodo granulare, la latenza e le percentuali di errore.
  • Gestione dei promemoria: esplorare e monitorare tutti i promemoria registrati nel cluster.
  • Streaming dei log dal vivo: Visualizza l'output dei log in tempo reale dal cluster.
  • Dettagli silo: esaminare le singole proprietà, i contatori e le distribuzioni di granularità.
  • Ispezione dello stato di granularità: visualizzare lo stato corrente delle singole istanze di granularità.

Installazione

Il Orleans dashboard viene distribuito in due pacchetti NuGet:

Package Description
Microsoft.Orleans.Cruscotto Pacchetto del dashboard principale con endpoint dell'interfaccia utente e dell'API
Microsoft.Orleans. Dashboard.Abstractions Astrazioni per l'integrazione del dashboard (ad esempio, NoProfilingAttribute)

Configurazione di base

Per aggiungere il Orleans Dashboard alla tua applicazione, chiamare AddDashboard() sul tuo generatore di silo e MapOrleansDashboard() per mappare gli endpoint del Dashboard.

using Orleans.Dashboard;

var builder = WebApplication.CreateBuilder(args);

// Configure Orleans with the dashboard
builder.UseOrleans(siloBuilder =>
{
    siloBuilder.UseLocalhostClustering();
    siloBuilder.AddMemoryGrainStorageAsDefault();

    // Add the dashboard services
    siloBuilder.AddDashboard();
});

var app = builder.Build();

// Map dashboard endpoints at the root path
app.MapOrleansDashboard();

app.Run();

Dopo aver avviato l'applicazione, passare a http://localhost:5000/ (o all'URL configurato) per accedere al dashboard.

Prefisso di route personalizzato

È possibile ospitare il dashboard in un percorso personalizzato specificando un prefisso di route:

// Map dashboard endpoints at /dashboard
app.MapOrleansDashboard(routePrefix: "/dashboard");

Con questa configurazione, accedere al dashboard all'indirizzo http://localhost:5000/dashboard/.

Configurazione

Opzioni del dashboard

Configurare il comportamento del dashboard usando DashboardOptions:

siloBuilder.AddDashboard(options =>
{
    // Disable the live log streaming endpoint
    options.HideTrace = true;

    // Set the counter update interval (minimum 1000ms)
    options.CounterUpdateIntervalMs = 2000;

    // Set the history buffer length for metrics
    options.HistoryLength = 200;
});
Opzione TIPO Predefinito Description
HideTrace bool false Disattiva l'endpoint per lo streaming dei registri in tempo reale quando true.
CounterUpdateIntervalMs int 1000 Millisecondi tra campioni di misurazione del contatore. Deve essere >= 1000.
HistoryLength int 100 Numero di punti dati cronologici da gestire per le metriche.

Opzioni del profiler granulare

Il profiler granulare raccoglie i dati sulle prestazioni a livello di metodo. Configurarlo usando GrainProfilerOptions:

builder.Services.Configure<GrainProfilerOptions>(options =>
{
    // Always collect profiling data, even when dashboard is inactive
    options.TraceAlways = true;

    // Time after which profiling stops if dashboard is inactive
    options.DeactivationTime = TimeSpan.FromMinutes(5);
});
Opzione TIPO Predefinito Description
TraceAlways bool false Quando true, i dati di profilatura vengono raccolti continuamente anche quando il dashboard non viene interrogato.
DeactivationTime TimeSpan 1 minuto Durata dell'inattività dopo la quale la profilatura si arresta automaticamente. Si applica solo quando TraceAlways è false.

Esclusione di grani dalla profilatura

Usare l'attributo [NoProfiling] per escludere grani specifici dalla profilatura delle prestazioni:

using Orleans.Dashboard;

[NoProfiling]
public class HighFrequencyGrain : Grain, IHighFrequencyGrain
{
    // This grain won't be included in profiling data
}

Modelli di distribuzione

Il modello di distribuzione più semplice consiste nell'ospitare il dashboard direttamente insieme al Orleans silo. Questo è l'approccio consigliato per la maggior parte degli scenari:

using Orleans.Dashboard;

var builder = WebApplication.CreateBuilder(args);

builder.UseOrleans(siloBuilder =>
{
    siloBuilder.UseLocalhostClustering();
    siloBuilder.UseInMemoryReminderService();
    siloBuilder.AddMemoryGrainStorageAsDefault();
    siloBuilder.AddDashboard();
});

var app = builder.Build();

app.MapOrleansDashboard();

app.Run();

Server separato del dashboard

Per gli scenari in cui si vuole eseguire il dashboard separatamente dai silo, ad esempio per fornire un endpoint di monitoraggio dedicato, è possibile ospitare il dashboard in un Orleans client:

using Orleans.Configuration;
using Orleans.Dashboard;
using System.Net;

// Start the silo host
var siloHostBuilder = Host.CreateApplicationBuilder(args);
siloHostBuilder.UseOrleans(builder =>
{
    builder.UseDevelopmentClustering(options => 
        options.PrimarySiloEndpoint = new IPEndPoint(IPAddress.Loopback, 11111));
    builder.UseInMemoryReminderService();
    builder.AddMemoryGrainStorageAsDefault();
    builder.ConfigureEndpoints(IPAddress.Loopback, 11111, 30000);

    // Dashboard must also be added to silos
    builder.AddDashboard();
});
using var siloHost = siloHostBuilder.Build();
await siloHost.StartAsync();

// Create a separate web application for the dashboard
var dashboardBuilder = WebApplication.CreateBuilder(args);

// Configure Orleans client
dashboardBuilder.UseOrleansClient(clientBuilder =>
{
    clientBuilder.UseStaticClustering(options => 
        options.Gateways.Add(new IPEndPoint(IPAddress.Loopback, 30000).ToGatewayUri()));

    // Add dashboard services to the client
    clientBuilder.AddDashboard();
});

var dashboardApp = dashboardBuilder.Build();

// Map dashboard endpoints on the client
dashboardApp.MapOrleansDashboard();

await dashboardApp.RunAsync();

await siloHost.StopAsync();

Importante

Quando si usa un host dashboard separato, è comunque necessario chiamare AddDashboard() sul builder del silo. I silo necessitano dei servizi dashboard per raccogliere e fornire i dati delle metriche.

Authorization

Gli endpoint del dashboard supportano l'autorizzazione di ASP.NET Core. Usare il RequireAuthorization() metodo di estensione per proteggere l'accesso:

// Require authentication for dashboard access
app.MapOrleansDashboard()
   .RequireAuthorization();

È anche possibile applicare criteri di autorizzazione specifici:

// Configure authorization
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("DashboardAccess", policy =>
        policy.RequireRole("Admin", "Operator"));
});

builder.Services.AddAuthentication(/* your auth configuration */);

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

// Apply the policy to dashboard endpoints
app.MapOrleansDashboard()
   .RequireAuthorization("DashboardAccess");

Risoluzione dei problemi

Il dashboard mostra il messaggio "connettività persa"

Questo errore si verifica quando il dashboard non riesce a comunicare con il Orleans cluster. Cause comuni:

  1. Silo non avviato: assicurarsi che il Orleans silo sia in esecuzione prima di accedere al dashboard.
  2. Problemi di rete: verificare la connettività di rete tra l'host del dashboard e i silo.
  3. Configurazione errata del cluster: verificare che il clustering sia configurato correttamente.

Dati di profilatura non visualizzati

Se i dati di profilatura del metodo di granularità sono vuoti:

  1. Effettuare chiamate granulari: la profilatura mostra solo i dati dopo che vengono richiamati i metodi di granularità.
  2. Controlla TraceAlways: per impostazione predefinita, la profilatura si arresta dopo 1 minuto di inattività del dashboard. Impostare TraceAlways = true per la profilatura continua.
  3. Controllare [NoProfiling]: verificare che il livello di granularità non sia contrassegnato con l'attributo [NoProfiling] .

L'endpoint di traccia dinamica è disabilitato

Se l'endpoint /Trace restituisce 403 Accesso negato:

  • Verificare che DashboardOptions.HideTrace non sia impostato su true.

Vedere anche

Il Orleans dashboard è uno strumento di monitoraggio predefinito introdotto nella Orleans versione 10.0. Per le versioni precedenti, è consigliabile usare: