Orleans Панели мониторинга

Orleans Панель мониторинга — это встроенный инструмент веб-мониторинга, который обеспечивает видимость в режиме реального времени вашего кластера. Он позволяет отслеживать состояние силосов, активацию зерна, вызовы методов, напоминания и системные метрики без нужды во внешней инфраструктуре мониторинга.

Для Orleans версии 10.0 используйте официальные пакеты панели мониторинга: Microsoft.Orleans.Dashboard и Microsoft.Orleans.Dashboard.Abstractions.

Это важно

Эта функция доступна начиная с Orleans версии 10.0. В настоящее время он находится в предварительной версии и может измениться в будущих выпусках.

Функции

Панель Orleans мониторинга предоставляет следующие возможности:

  • Общие сведения о кластере. Просмотр всех силосов в кластере с их состоянием, временем простоя и использованием ресурсов.
  • Мониторинг зерна: отслеживание активаций зерна, вызовов методов и метрик производительности для каждого типа зерна.
  • Профилирование методов: анализ частоты вызовов методов на зернистом уровне, временных задержек и уровня ошибок.
  • Управление напоминаниями. Просмотр и мониторинг всех зарегистрированных напоминаний в кластере.
  • Потоковая передача логов в реальном времени: просмотр логов из кластера в режиме реального времени.
  • Сведения о силосе: инспектируйте отдельные свойства, счетчики и распределения зерна.
  • Проверка состояния зерна: просмотр текущего состояния отдельных экземпляров зерна.

Installation

Orleans Панель мониторинга распределена в двух пакетах NuGet:

Package Description
Microsoft.Orleans. Панель управления Основной пакет панели мониторинга с конечными точками пользовательского интерфейса и 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;
});
Вариант Тип По умолчанию 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);
});
Вариант Тип По умолчанию 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
}

Шаблоны развертывания

Самый простой шаблон развертывания — это размещение панели мониторинга непосредственно вместе с вашим «silo». Это рекомендуемый подход для большинства сценариев:

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() построитель silo. Силосам нужны службы панели мониторинга для сбора и предоставления данных метрик.

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 . Распространенные причины:

  1. Silo не запущен: убедитесь, что Orleans silo запущен перед доступом к панели управления.
  2. Проблемы с сетью: Проверьте сетевое подключение между сервером панели мониторинга и хранилищами.
  3. Неправильное настройка кластера. Убедитесь, что кластеризация настроена правильно.

Данные профилирования не отображаются

Если данные профилирования метода обработки зерна пусты:

  1. Совершайте вызовы зерен: профилирование показывает только данные после исполнения методов зерна.
  2. Проверка TraceAlways. По умолчанию профилирование останавливается через 1 минуту бездействия панели мониторинга. Установите TraceAlways = true для непрерывного профилирования.
  3. Проверка [NoProfiling]: убедитесь, что зерно не помечается атрибутом [NoProfiling] .

Конечная точка динамической трассировки отключена

Если конечная /Trace точка возвращает значение 403 Запрещено:

  • Убедитесь, что DashboardOptions.HideTrace не задано значение true.

См. также

Orleans Панель мониторинга — это встроенное средство мониторинга, представленное в Orleans версии 10.0. Для Orleans 9.0, 8.0 и 7.0 используйте неофициальный пакет панели мониторинга сообщества:

  • OrleansDashboard (community): пакет панели мониторинга, поддерживаемый сообществом, для Orleans версий выше 10.0.
  • Интеграция OpenTelemetry: встроенные функции наблюдения доступны в Orleans версии 7.0 и более поздних версий. См. раздел "Наблюдаемость" в Orleans.

Orleans Панель мониторинга — это встроенное средство мониторинга, представленное в Orleans версии 10.0. Для Orleans 3.x используйте неофициальный пакет панели мониторинга сообщества:

  • OrleansDashboard (community): пакет панели мониторинга, поддерживаемый сообществом, для Orleans версий выше 10.0.