다음을 통해 공유


Orleans 대시보드

내장된 웹 기반 모니터링 도구인 Orleans 대시보드는 Orleans 클러스터에 대한 실시간 가시성을 제공합니다. 외부 모니터링 인프라 없이도 사일로 상태, 곡물 활성화, 메서드 호출, 미리 알림 및 시스템 메트릭을 모니터링할 수 있습니다.

중요합니다

이 기능은 10.0부터 Orleans 사용할 수 있습니다. 현재 미리 보기 로 제공되며 향후 릴리스에서 변경될 수 있습니다.

기능

대시보드는 Orleans 다음과 같은 기능을 제공합니다.

  • 클러스터 개요: 클러스터의 모든 사일로를 상태, 작동 시간, 리소스 사용률과 함께 확인합니다.
  • 곡물 모니터링: 곡물 유형별 곡물 활성화, 메서드 호출 및 성능 메트릭을 추적합니다.
  • 메서드 프로파일링: 세분화된 메서드 호출 빈도, 대기 시간 및 오류 비율을 분석합니다.
  • 미리 알림 관리: 클러스터 전체에서 등록된 모든 미리 알림을 찾아보고 모니터링합니다.
  • 라이브 로그 스트리밍: 클러스터의 실시간 로그 출력을 봅니다.
  • 사일로 세부 정보: 개별 사일로 속성, 카운터 및 곡물 분포를 검사합니다.
  • 곡물 상태 검사: 개별 곡물 인스턴스의 현재 상태를 확인합니다.

설치

대시보드는 Orleans 두 개의 NuGet 패키지로 배포됩니다.

Package Description
Microsoft.Orleans.대시보드 UI 및 API 엔드포인트가 있는 기본 대시보드 패키지
Microsoft.Orleans. Dashboard.Abstractions 대시보드 통합에 대한 추상화(예: NoProfilingAttribute)

기본 설정

애플리케이션에 대시보드를 추가하려면 사일로 작성기에서 Orleans을 호출하고, 대시보드 엔드포인트를 매핑하기 위해 AddDashboard()를 사용하세요.

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

애플리케이션을 시작한 후(또는 구성된 URL)로 이동하여 http://localhost:5000/ 대시보드에 액세스합니다.

사용자 지정 경로 접두사

경로 접두사를 지정하여 사용자 지정 경로에서 대시보드를 호스트할 수 있습니다.

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

이 구성을 사용하여 http://localhost:5000/dashboard/에서 대시보드에 액세스합니다.

구성 / 설정

대시보드 옵션

다음을 사용하여 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 유형 Default Description
HideTrace bool false true인 경우, 라이브 로그 스트리밍 엔드포인트를 비활성화합니다.
CounterUpdateIntervalMs int 1000 카운터 샘플 사이의 밀리초입니다. >= 1000 이상이어야 합니다.
HistoryLength int 100 메트릭에 대해 유지 관리할 기록 데이터 요소 수입니다.

그레인 프로파일러 옵션

그레인 프로파일러가 메서드 수준 성능 데이터를 수집합니다. 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 유형 Default Description
TraceAlways bool false 이 경우 true대시보드가 쿼리되지 않는 경우에도 프로파일링 데이터가 지속적으로 수집됩니다.
DeactivationTime TimeSpan 1분 프로파일링이 자동으로 중지된 후의 비활성 기간입니다. 다음의 경우에만 적용됩니다: TraceAlwaysfalse.

프로파일링에서 곡물 제외

[NoProfiling] 특성을 사용하여 성능 프로파일링에서 특정 곡물을 제외합니다.

using Orleans.Dashboard;

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

배포 패턴

가장 간단한 배포 패턴은 Orleans 사일로와 함께 대시보드를 직접 호스트하는 것입니다. 대부분의 시나리오에 권장되는 방법은 다음과 같습니다.

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

별도의 대시보드 호스트

사일로와 별도로 대시보드를 실행하려는 시나리오(예: 전용 모니터링 엔드포인트 제공)의 경우 클라이언트에서 대시보드를 Orleans 호스트할 수 있습니다.

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

중요합니다

별도의 대시보드 호스트를 사용하는 경우 여전히 사일로 빌더에서 AddDashboard()를 호출해야 합니다. 사일로는 메트릭 데이터를 수집하고 제공하기 위해 대시보드 서비스가 필요합니다.

Authorization

대시보드 엔드포인트는 ASP.NET Core 권한 부여를 지원합니다. 확장 메서드를 RequireAuthorization() 사용하여 액세스를 보호합니다.

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

특정 권한 부여 정책을 적용할 수도 있습니다.

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

Troubleshooting

대시보드에서 "연결 끊기" 메시지를 표시합니다.

이 오류는 대시보드가 클러스터와 통신할 수 없는 경우에 Orleans 발생합니다. 일반적인 원인:

  1. 사일로가 시작되지 않음: 대시보드에 액세스하기 전에 사일로가 실행되고 있는지 확인합니다 Orleans .
  2. 네트워크 문제: 대시보드 호스트와 사일로 간의 네트워크 연결을 확인합니다.
  3. 클러스터 구성 오류: 클러스터링이 제대로 구성되었는지 확인합니다.

프로파일링 데이터가 표시되지 않음

grain 메서드 프로파일링 데이터가 비어 있는 경우:

  1. 곡물 호출: 프로파일링은 그레인 메서드가 호출된 후에만 데이터를 표시합니다.
  2. 확인 TraceAlways: 기본적으로 대시보드가 비활성 상태인 1분 후에 프로파일링이 중지됩니다. 연속 프로파일링을 위해 TraceAlways = true을(를) 설정합니다.
  3. 확인: 그레인에 특성이 표시되지 않았는지 확인합니다.

라이브 트레이스 엔드포인트가 비활성화됨

엔드포인트가 /Trace 403 금지됨을 반환하는 경우:

  • DashboardOptions.HideTrace이(가) true으로 설정되지 않았는지 확인합니다.

참고하십시오

Orleans 대시보드는 Orleans 10.0에 도입된 기본 제공 모니터링 도구입니다. 이전 버전의 경우 다음을 사용하는 것이 좋습니다.