Поделиться через


Проверки работоспособности gRPC в ASP.NET Core

Примечание.

Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 9 этой статьи.

Внимание

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

В текущем выпуске см . версию .NET 9 этой статьи.

Автор: Джеймс Ньютон-Кинг (James Newton-King)

Протокол проверки работоспособности gRPC является стандартом для передачи сведений о работоспособности серверных приложений gRPC.

Проверки работоспособности предоставляются приложением в качестве службы gRPC. Обычно они используются с внешней службой мониторинга для проверки состояния приложения. Службу можно настроить для различных сценариев мониторинга в реальном времени:

  • Проверки работоспособности можно использовать с оркестраторами контейнеров и подсистемами балансировки нагрузки, чтобы проверять состояние приложения. Например, Kubernetes поддерживает пробы активности, готовности и запуска gRPC. Kubernetes можно настроить для перенаправления трафика или перезапуска неработоспособных контейнеров на основе результатов проверки работоспособности gRPC.
  • Использование памяти, диска и других ресурсов физического сервера можно отслеживать с точки зрения работоспособности.
  • Проверки работоспособности позволяют проверять зависимости приложения, такие как базы данных и конечные точки внешних служб, чтобы убедиться в доступности и нормальной работе.

Настройка проверок работоспособности gRPC

В gRPC ASP.NET Core есть встроенная поддержка проверок работоспособности gRPC, обеспечиваемая пакетом Grpc.AspNetCore.HealthChecks. Результаты проверок работоспособности .NET передаются вызывающим объектам.

Чтобы настроить проверки работоспособности gRPC в приложении, сделайте следующее:

  • Добавьте ссылку на пакет Grpc.AspNetCore.HealthChecks.
  • Зарегистрируйте службу проверок работоспособности gRPC:
    • AddGrpcHealthChecks для регистрации служб, обеспечивающих проверки работоспособности;
    • MapGrpcHealthChecksService для добавления конечной точки службы проверок работоспособности.
  • Добавьте проверки работоспособности, реализовав IHealthCheck или используя метод AddCheck.
using GrpcServiceHC.Services;
using Microsoft.Extensions.Diagnostics.HealthChecks;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks()
                .AddCheck("Sample", () => HealthCheckResult.Healthy());

var app = builder.Build();

app.MapGrpcService<GreeterService>();
app.MapGrpcHealthChecksService();

// Code removed for brevity.

При настройке проверок работоспособности:

  • Служба проверок работоспособности добавляется в серверное приложение.
  • Проверки работоспособности .NET, зарегистрированные в приложении, периодически выполняются для получения результатов работоспособности. По умолчанию после запуска приложения выполняется 5-секундная задержка, а затем проверки работоспособности выполняются каждые 30 секунд. Интервал выполнения проверки работоспособности можно настроить с помощью HealthCheckPublisherOptions.
  • Результаты работоспособности определяют, какие отчеты службы gRPC:
    • Unknown выдается при отсутствии результатов работоспособности.
    • NotServing выдается при наличии каких-либо результатов работоспособности HealthStatus.Unhealthy.
    • В противном случае выдается Serving.

Безопасность службы проверки работоспособности

Проверка работоспособности gRPC возвращает состояние работоспособности приложения, которое может быть конфиденциальной информацией. Необходимо принять меры, чтобы ограничить доступ к службе проверок работоспособности gRPC.

Доступ к службе можно контролировать с помощью стандартных методов расширения авторизации ASP.NET Core, таких как AllowAnonymous и RequireAuthorization.

Например, если приложение настроено для авторизации по умолчанию, настройте конечную точку проверки работоспособности gRPC, AllowAnonymous чтобы пропустить проверку подлинности и авторизацию.

app.MapGrpcHealthChecksService().AllowAnonymous();

Настройка Grpc.AspNetCore.HealthChecks

По умолчанию служба проверок работоспособности gRPC использует все зарегистрированные проверки работоспособности для определения состояния работоспособности. Проверки работоспособности gRPC можно настроить, если выполнена регистрация для использования подмножества проверок работоспособности. Метод MapService используется для сопоставления результатов работоспособности с именами служб вместе с предикатом для фильтрации результатов работоспособности:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks(o =>
{
    o.Services.MapService("", r => r.Tags.Contains("public"));
});

var app = builder.Build();

В предыдущем коде переопределяется служба по умолчанию ("") для использования результатов работоспособности только с тегом public.

Проверки работоспособности gRPC поддерживают указание аргумента имени службы клиентом при проверке работоспособности. Поддержка нескольких служб реализуется путем передачи имени службы в MapService:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks(o =>
{
    o.Services.MapService("greet.Greeter", r => r.Tags.Contains("greeter"));
    o.Services.MapService("count.Counter", r => r.Tags.Contains("counter"));
});

var app = builder.Build();

Имя службы, указанное клиентом, обычно является именем службы по умолчанию ("") или именем службы, соответствующим требованиям пакета, в приложении. Однако ничто не мешает клиенту использовать произвольные значения для проверки работоспособности приложения.

Настройка интервала выполнения проверок работоспособности

Проверки работоспособности выполняются немедленно при Check вызове. Watch — это метод потоковой передачи и отличается от поведения Check: длительный поток сообщает результаты проверки работоспособности с течением времени, периодически выполняя IHealthCheckPublisher сбор результатов работоспособности. По умолчанию издатель:

  • Ожидает 5 секунд после запуска приложения перед выполнением проверок работоспособности.
  • Выполняет проверки работоспособности каждые 30 секунд.

Интервалы для издателя можно настроить, используя HealthCheckPublisherOptions при запуске:

builder.Services.Configure<HealthCheckPublisherOptions>(options =>
{
    options.Delay = TimeSpan.Zero;
    options.Period = TimeSpan.FromSeconds(10);
});

Вызов службы проверок работоспособности gRPC

В пакет Grpc.HealthCheck включен клиент для проверок работоспособности gRPC:

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Health.HealthClient(channel);

var response = await client.CheckAsync(new HealthCheckRequest());
var status = response.Status;

Для службы Health существует два метода:

  • Check — унарный метод для получения текущего состояния работоспособности. Проверки работоспособности выполняются немедленно при Check вызове. Если клиент запрашивает неизвестное имя службы, сервер возвращает ответ с ошибкой NOT_FOUND. Это может произойти при запуске приложения, когда результаты работоспособности еще не опубликованы.
  • Watch — метод потоковой передачи, который сообщает об изменениях состояния работоспособности за период времени. IHealthCheckPublisher периодически выполняется для сбора результатов работоспособности. Если клиент запрашивает неизвестное имя службы, сервер возвращает состояние Unknown.

Клиент Grpc.HealthCheck можно использовать в подходе фабрики клиентов:

builder.Services
    .AddGrpcClient<Health.HealthClient>(o =>
    {
        o.Address = new Uri("https://localhost:5001");
    });

В предыдущем примере фабрика клиентов для Health.HealthClient экземпляров зарегистрирована в системе внедрения зависимостей. Затем эти экземпляры внедряются в службы для выполнения вызовов проверки работоспособности.

Дополнительные сведения см. в статье Интеграция фабрики клиента gRPC в .NET.

Дополнительные ресурсы

Автор: Джеймс Ньютон-Кинг (James Newton-King)

Протокол проверки работоспособности gRPC является стандартом для передачи сведений о работоспособности серверных приложений gRPC.

Проверки работоспособности предоставляются приложением в качестве службы gRPC. Они обычно используются с внешней службой мониторинга для проверки состояния приложения. Службу можно настроить для различных сценариев мониторинга в реальном времени:

  • Проверки работоспособности можно использовать с оркестраторами контейнеров и подсистемами балансировки нагрузки, чтобы проверять состояние приложения. Например, Kubernetes поддерживает пробы активности, готовности и запуска gRPC. Kubernetes можно настроить для перенаправления трафика или перезапуска неработоспособных контейнеров на основе результатов проверки работоспособности gRPC.
  • Использование памяти, диска и других ресурсов физического сервера можно отслеживать с точки зрения работоспособности.
  • Проверки работоспособности позволяют проверять зависимости приложения, такие как базы данных и конечные точки внешних служб, чтобы убедиться в доступности и нормальной работе.

Настройка проверок работоспособности gRPC

В gRPC ASP.NET Core есть встроенная поддержка проверок работоспособности gRPC, обеспечиваемая пакетом Grpc.AspNetCore.HealthChecks. Результаты проверок работоспособности .NET передаются вызывающим объектам.

Чтобы настроить проверки работоспособности gRPC в приложении, сделайте следующее:

  • Добавьте ссылку на пакет Grpc.AspNetCore.HealthChecks.
  • Регистрация службы проверок работоспособности gRPC в Startup.cs:
    • AddGrpcHealthChecks для регистрации служб, обеспечивающих проверки работоспособности;
    • MapGrpcHealthChecksService для добавления конечной точки службы проверок работоспособности.
  • Добавьте проверки работоспособности, реализовав IHealthCheck или используя метод AddCheck.
public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
    services
        .AddGrpcHealthChecks()
        .AddCheck("Sample", () => HealthCheckResult.Healthy());
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>();
        endpoints.MapGrpcHealthChecksService();
    });
}

При настройке проверок работоспособности:

  • Служба проверок работоспособности добавляется в серверное приложение.
  • Проверки работоспособности .NET, зарегистрированные в приложении, периодически выполняются для получения результатов работоспособности. По умолчанию задержка после запуска приложения составляет 5 секунд, а затем проверки работоспособности выполняются каждые 30 секунд. Интервал выполнения проверки работоспособности можно настроить с помощью HealthCheckPublisherOptions.
  • Результаты работоспособности определяют, какие отчеты службы gRPC:
    • Unknown выдается при отсутствии результатов работоспособности.
    • NotServing выдается при наличии каких-либо результатов работоспособности HealthStatus.Unhealthy.
    • В противном случае выдается Serving.

Настройка Grpc.AspNetCore.HealthChecks

По умолчанию служба проверок работоспособности gRPC использует все зарегистрированные проверки работоспособности для определения состояния работоспособности. Проверки работоспособности gRPC можно настроить, если выполнена регистрация для использования подмножества проверок работоспособности. Метод MapService используется для сопоставления результатов работоспособности с именами служб вместе с предикатом для фильтрации результатов работоспособности:

services.AddGrpcHealthChecks(o =>
{
    o.Services.MapService("", r => r.Tags.Contains("public"));
});

В предыдущем коде переопределяется служба по умолчанию ("") для использования результатов работоспособности только с тегом public.

Проверки работоспособности gRPC поддерживают указание аргумента имени службы клиентом при проверке работоспособности. Поддержка нескольких служб реализуется путем передачи имени службы в MapService:

services.AddGrpcHealthChecks(o =>
{
    o.Services.MapService("greet.Greeter", r => r.Tags.Contains("greeter"));
    o.Services.MapService("count.Counter", r => r.Tags.Contains("counter"));
});

Имя службы, указанное клиентом, обычно является именем службы по умолчанию ("") или именем службы, соответствующим требованиям пакета, в приложении. Однако ничто не мешает клиенту использовать произвольные значения для проверки работоспособности приложения.

Настройка интервала выполнения проверок работоспособности

Проверки работоспособности выполняются немедленно при Check вызове. Watch — это метод потоковой передачи и отличается от поведения Check: длительный поток сообщает результаты проверки работоспособности с течением времени, периодически выполняя IHealthCheckPublisher сбор результатов работоспособности. По умолчанию издатель:

  • Ожидает 5 секунд после запуска приложения перед выполнением проверок работоспособности.
  • Выполняет проверки работоспособности каждые 30 секунд.

Интервалы для издателя можно настроить, используя HealthCheckPublisherOptions при запуске:

services.Configure<HealthCheckPublisherOptions>(options =>
{
    options.Delay = TimeSpan.Zero;
    options.Period = TimeSpan.FromSeconds(10);
});

Вызов службы проверок работоспособности gRPC

В пакет Grpc.HealthCheck включен клиент для проверок работоспособности gRPC:

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Health.HealthClient(channel);

var response = client.CheckAsync(new HealthCheckRequest());
var status = response.Status;

Для службы Health существует два метода:

  • Check — унарный метод для получения текущего состояния работоспособности. Проверки работоспособности выполняются немедленно при Check вызове. Если клиент запрашивает неизвестное имя службы, сервер возвращает ответ с ошибкой NOT_FOUND. Это может произойти при запуске приложения, когда результаты работоспособности еще не опубликованы.
  • Watch — метод потоковой передачи, который сообщает об изменениях состояния работоспособности за период времени. IHealthCheckPublisher периодически выполняется для сбора результатов работоспособности. Если клиент запрашивает неизвестное имя службы, сервер возвращает состояние Unknown.

Дополнительные ресурсы