Orleans ダッシュボードは、Orleans クラスターをリアルタイムで可視化する組み込みの Web ベースの監視ツールです。 これにより、外部監視インフラストラクチャを必要とせずに、サイロの正常性、グレインのアクティブ化、メソッド呼び出し、アラーム、システム メトリックを監視できます。
Important
この機能は、 Orleans 10.0 以降で使用できます。 現在 プレビュー 段階であり、今後のリリースで変更される可能性があります。
Features
Orleans ダッシュボードには、次の機能があります。
- クラスターの概要: クラスター内のすべてのサイロとその状態、アップタイム、およびリソース使用率を表示します。
- グレインの監視: グレインの種類ごとに、グレインのアクティブ化、メソッド呼び出し、およびパフォーマンス メトリックを追跡します。
- メソッド プロファイリング: グレイン メソッドの呼び出し頻度、待機時間、エラー率を分析します。
- アラーム管理: クラスター全体で登録されているすべてのアラームを参照および監視します。
- ライブ ログ ストリーミング: クラスターからのリアルタイム ログ出力を表示します。
- サイロの詳細: 個々のサイロのプロパティ、カウンター、およびグレイン分布を検査します。
- グレイン状態検査: 個々のグレイン インスタンスの現在の状態を表示します。
Installation
Orleans ダッシュボードは、次の 2 つの NuGet パッケージで配布されます。
| パッケージ | Description |
|---|---|
| Microsoft.Orleans。ダッシュボード | UI と API エンドポイントを含むメイン ダッシュボード パッケージ |
| Microsoft.Orleans。Dashboard.Abstractions | ダッシュボード統合の抽象化 (例: NoProfilingAttribute) |
基本的なセットアップ
Orleans ダッシュボードをアプリケーションに追加するには、サイロ ビルダーでAddDashboard()を呼び出し、MapOrleansDashboard()してダッシュボード エンドポイントをマップします。
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();
アプリケーションを起動したら、 http://localhost:5000/ (または構成済みの URL) に移動してダッシュボードにアクセスします。
カスタム ルート プレフィックス
ルート プレフィックスを指定することで、カスタム パスでダッシュボードをホストできます。
// 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 | タイプ | 既定値 | 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 | タイプ | 既定値 | Description |
|---|---|---|---|
TraceAlways |
bool |
false |
trueすると、ダッシュボードのクエリを実行していない場合でも、プロファイリング データが継続的に収集されます。 |
DeactivationTime |
TimeSpan | 1 分 | プロファイリングが自動的に停止するまでの非アクティブな期間。
TraceAlwaysがfalseされている場合にのみ適用されます。 |
プロファイリングからグレインの除外
[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();
Important
別のダッシュボード ホストを使用する場合でも、サイロ ビルダーで 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");
トラブルシューティング
ダッシュボードに "接続が失われました" というメッセージが表示される
このエラーは、ダッシュボードが Orleans クラスターと通信できない場合に発生します。 一般的な原因:
- サイロが開始されていない: ダッシュボードにアクセスする前に、 Orleans サイロが実行されていることを確認します。
- ネットワークの問題: ダッシュボード ホストとサイロの間のネットワーク接続を確認します。
- クラスターの構成ミス: クラスタリングが正しく構成されていることを確認します。
プロファイル データが表示されない
グレイン メソッドのプロファイリング データが空の場合:
- グレイン呼び出しを行う: プロファイリングでは、グレイン メソッドが呼び出された後にのみデータが表示されます。
-
TraceAlwaysチェック: 既定では、プロファイリングはダッシュボードが 1 分間非アクティブになってから停止します。 継続的プロファイリングのTraceAlways = trueを設定します。 -
[NoProfiling]確認: グレインが[NoProfiling]属性でマークされていないことを確認します。
ライブ トレース エンドポイントが無効になっている
/Trace エンドポイントが 403 Forbidden を返す場合:
-
DashboardOptions.HideTraceがtrueに設定されていないことを確認します。
こちらも参照ください
Orleans ダッシュボードは、Orleans 10.0 で導入された組み込みの監視ツールです。 以前のバージョンでは、次のものの使用を検討してください。
- OrleansDashboard (community): Orleans 3.x から 8.x のコミュニティが管理するダッシュボード。
- OpenTelemetry 統合: Orleans 7.0 以降で利用可能な組み込みのオブザーバビリティ機能。 「Orleansの可観測性」を参照してください。
.NET