Udostępnij przez


Orleans Pulpitu nawigacyjnego

Dashboard Orleans to wbudowane internetowe narzędzie do monitorowania, które zapewnia wgląd w czasie rzeczywistym w klaster Orleans. Umożliwia monitorowanie kondycji silosu, aktywacji ziarna, wywołań metod, przypomnień i metryk systemowych bez konieczności zewnętrznej infrastruktury monitorowania.

Ważne

Ta funkcja jest dostępna od Orleans wersji 10.0. Jest ona obecnie dostępna w wersji zapoznawczej i może ulec zmianie w przyszłych wersjach.

Funkcje

Pulpit Orleans nawigacyjny zapewnia następujące możliwości:

  • Omówienie klastra: wyświetl wszystkie silosy w klastrze z ich stanem, czasem pracy i wykorzystaniem zasobów.
  • Monitorowanie ziarna: śledzenie aktywacji ziarna, wywołań metod i metryk wydajności na typ ziarna.
  • Profilowanie metod: analizowanie częstotliwości wywołań metod, opóźnienia i współczynników błędów.
  • Zarządzanie przypomnieniami: przeglądaj i monitoruj wszystkie zarejestrowane przypomnienia w klastrze.
  • Przesyłanie strumieniowe dzienników na żywo: wyświetlanie danych wyjściowych dziennika w czasie rzeczywistym z klastra.
  • Szczegóły silosu: Sprawdź poszczególne właściwości silosu, liczniki i rozkłady ziarna.
  • Inspekcja stanu ziarna: wyświetl bieżący stan pojedynczych instancji ziarna.

Instalacja

Dashboard Orleans jest dostępny w dwóch pakietach NuGet.

Package Description
Microsoft.Orleans. Pulpitu nawigacyjnego Podstawowy zestaw pulpitu nawigacyjnego z punktami końcowymi interfejsu użytkownika i API
Microsoft.Orleans. Dashboard.Abstractions Abstrakcje integracji pulpitu nawigacyjnego (np. NoProfilingAttribute)

Konfiguracja podstawowa

Aby dodać Orleans pulpit nawigacyjny do aplikacji, wywołaj AddDashboard() konstruktor silosu i MapOrleansDashboard() zamapuj punkty końcowe pulpitu nawigacyjnego:

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();

Po uruchomieniu aplikacji przejdź do http://localhost:5000/ (lub skonfigurowanego adresu URL), aby uzyskać dostęp do pulpitu nawigacyjnego.

Prefiks niestandardowej trasy

Można hostować kokpit na ścieżce niestandardowej, określając prefiks ścieżki:

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

Dzięki tej konfiguracji uzyskaj dostęp do pulpitu nawigacyjnego pod adresem http://localhost:5000/dashboard/.

Konfiguracja

Opcje pulpitu nawigacyjnego

Konfigurowanie zachowania pulpitu nawigacyjnego przy użyciu polecenia 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;
});
Option Typ Default Description
HideTrace bool false Gdy true, wyłącza punkt końcowy strumieniowego przesyłania dzienników na żywo.
CounterUpdateIntervalMs int 1000 Milisekundy między próbkami liczników. Musi być >= 1000.
HistoryLength int 100 Liczba historycznych punktów danych, które należy utrzymać dla parametrów metrycznych.

Opcje profilera ziarna

Profiler ziarna zbiera dane o wydajności na poziomie metody. Skonfiguruj go przy użyciu polecenia 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);
});
Option Typ Default Description
TraceAlways bool false W przypadku true, dane profilowania są stale zbierane nawet wtedy, gdy pulpit nawigacyjny nie jest przeszukiwany.
DeactivationTime TimeSpan 1 minuta Czas trwania braku aktywności, po którym profilowanie zostanie automatycznie zatrzymane. Ma zastosowanie tylko wtedy, gdy TraceAlways ma wartość false.

Wykluczanie ziarnistości z profilowania

Użyj atrybutu [NoProfiling] , aby wykluczyć określone ziarna z profilowania wydajności:

using Orleans.Dashboard;

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

Wzorce wdrażania

Najprostszym schematem wdrażania jest hostowanie pulpitu nawigacyjnego bezpośrednio z silosem Orleans. Jest to zalecane podejście dla większości scenariuszy:

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();

Oddzielny host pulpitu nawigacyjnego

W przypadku scenariuszy, w których chcesz uruchomić pulpit nawigacyjny niezależnie od silosów (na przykład w celu zapewnienia dedykowanego punktu końcowego monitorowania), możesz hostować pulpit nawigacyjny na Orleans kliencie:

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();

Ważne

Kiedy używasz oddzielnego hosta dla pulpitu nawigacyjnego, nadal musisz wywoływać AddDashboard() na budowniczym silosów. Silosy wymagają usług dashboardowych do zbierania i dostarczania danych metryk.

Authorization

Punkty końcowe pulpitu nawigacyjnego obsługują autoryzację ASP.NET Core. RequireAuthorization() Użyj metody rozszerzenia, aby chronić dostęp:

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

Można również zastosować określone zasady autoryzacji:

// 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");

Rozwiązywanie problemów

Na pulpicie nawigacyjnym jest wyświetlany komunikat "utracona łączność"

Ten błąd występuje, gdy pulpit nawigacyjny nie może komunikować się z klastrem Orleans . Typowe przyczyny:

  1. Nie uruchomiono silosu: upewnij się, że Orleans silos jest uruchomiony przed uzyskaniem dostępu do pulpitu nawigacyjnego.
  2. Problemy z siecią: Sprawdź łączność sieciową między hostem pulpitu nawigacyjnego a silosami.
  3. Błędna konfiguracja klastra: sprawdź, czy klastrowanie jest prawidłowo skonfigurowane.

Nie są wyświetlane dane profilowania

Jeśli dane profilowania metody ziarna są puste:

  1. Wywołania ziarna: Profilowanie pokazuje tylko dane po wywołaniu metod ziarna.
  2. Sprawdź TraceAlways: domyślnie profilowanie zatrzymuje się po 1 minucie braku aktywności pulpitu nawigacyjnego. Ustaw TraceAlways = true dla profilowania ciągłego.
  3. Sprawdź [NoProfiling]: Upewnij się, że ziarno nie jest oznaczone atrybutem [NoProfiling] .

Punkt końcowy śledzenia na żywo jest wyłączony

/Trace Jeśli punkt końcowy zwraca wartość 403 Zabronione:

  • Sprawdź, czy DashboardOptions.HideTrace nie jest ustawione na true.

Zobacz także

Pulpit Orleans nawigacyjny to wbudowane narzędzie do monitorowania wprowadzone w wersji Orleans 10.0. W przypadku wcześniejszych wersji rozważ użycie następujących funkcji: