Udostępnij za pośrednictwem


kontrole kondycji gRPC w programie ASP.NET Core

Uwaga

Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.

Ostrzeżenie

Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz zasady pomocy technicznej platformy .NET i platformy .NET Core. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.

Ważne

Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.

Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.

Autor: James Newton-King

Protokół kontroli kondycji gRPC jest standardem raportowania kondycji aplikacji serwera gRPC.

Testy kondycji są udostępniane przez aplikację jako usługę gRPC. Są one zwykle używane z zewnętrzną usługą monitorowania w celu sprawdzenia stanu aplikacji. Usługę można skonfigurować dla różnych scenariuszy monitorowania w czasie rzeczywistym:

  • Sondy kondycji mogą być używane przez koordynatorów kontenerów i moduły równoważenia obciążenia w celu sprawdzenia stanu aplikacji. Na przykład platforma Kubernetes obsługuje liveness gRPC, gotowość i sondy uruchamiania. Platformę Kubernetes można skonfigurować do przekierowywania ruchu lub ponownego uruchamiania kontenerów w złej kondycji na podstawie wyników sprawdzania kondycji gRPC.
  • Użycie pamięci, dysku i innych zasobów serwera fizycznego można monitorować pod kątem stanu dobrej kondycji.
  • Testy kondycji mogą testować zależności aplikacji, takie jak bazy danych i zewnętrzne punkty końcowe usługi, w celu potwierdzenia dostępności i normalnego działania.

Konfigurowanie kontroli kondycji usługi gRPC

GRPC ASP.NET Core ma wbudowaną obsługę kontroli kondycji gRPC z pakietem Grpc.AspNetCore.HealthChecks . Wyniki kontroli kondycji platformy .NET są zgłaszane do osób wywołujących.

Aby skonfigurować kontrole kondycji gRPC w aplikacji:

  • Dodaj odwołanie do Grpc.AspNetCore.HealthChecks pakietu.
  • Zarejestruj usługę kontroli kondycji gRPC:
    • AddGrpcHealthChecks do rejestrowania usług, które umożliwiają kontrole kondycji.
    • MapGrpcHealthChecksService aby dodać punkt końcowy usługi sprawdzania kondycji.
  • Dodaj kontrole kondycji, implementując IHealthCheck lub używając AddCheck metody .
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.

Po skonfigurowaniu kontroli kondycji:

  • Usługa sprawdzania kondycji jest dodawana do aplikacji serwera.
  • Testy kondycji platformy .NET zarejestrowane w aplikacji są okresowo wykonywane w celu uzyskania wyników kondycji. Domyślnie występuje 5-sekundowe opóźnienie po uruchomieniu aplikacji, a następnie sprawdzanie kondycji jest wykonywane co 30 sekund. Interwał wykonywania kontroli kondycji można dostosować za pomocą polecenia HealthCheckPublisherOptions.
  • Wyniki kondycji określają, co raportuje usługa gRPC:
    • Unknown jest zgłaszany, gdy nie ma żadnych wyników dotyczących kondycji.
    • NotServingjest zgłaszany, gdy istnieją jakiekolwiek wyniki kondycji .HealthStatus.Unhealthy
    • Serving W przeciwnym razie jest zgłaszany.

Zabezpieczenia usługi kontroli kondycji

Funkcja kontroli kondycji gRPC zwraca stan kondycji aplikacji, co może być informacjami poufnymi. Należy zadbać o ograniczenie dostępu do usługi kontroli kondycji gRPC.

Dostęp do usługi można kontrolować za pomocą standardowych metod rozszerzenia autoryzacji ASP.NET Core, takich jak AllowAnonymous i RequireAuthorization.

Jeśli na przykład aplikacja została skonfigurowana tak, aby domyślnie wymagała autoryzacji, skonfiguruj punkt końcowy kontroli kondycji gRPC, AllowAnonymous aby pominąć uwierzytelnianie i autoryzację.

app.MapGrpcHealthChecksService().AllowAnonymous();

Konfigurować Grpc.AspNetCore.HealthChecks

Domyślnie usługa kontroli kondycji gRPC używa wszystkich zarejestrowanych kontroli kondycji w celu określenia stanu kondycji. Kontrole kondycji gRPC można dostosować podczas rejestrowania w celu korzystania z podzbioru kontroli kondycji. Metoda MapService służy do mapowania wyników kondycji na nazwy usług wraz z predykatem na potrzeby filtrowania wyników kondycji:

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Powyższy kod zastępuje usługę domyślną (""), aby używać tylko wyników kondycji z tagiem "public".

Testy kondycji gRPC obsługują klienta określając argument nazwy usługi podczas sprawdzania kondycji. Wiele usług jest obsługiwanych przez podanie nazwy usługi na :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();

Nazwa usługi określona przez klienta jest zwykle domyślną ("") lub kwalifikowaną przez pakiet nazwą usługi w aplikacji. Jednak nic nie uniemożliwia klientowi używania dowolnych wartości do sprawdzania kondycji aplikacji.

Konfigurowanie interwału wykonywania testów kondycji

Testy kondycji są uruchamiane natychmiast po Check wywołaniu. Watch jest metodą przesyłania strumieniowego i ma inne zachowanie niż Check: Długotrwały strumień zgłasza wyniki kontroli kondycji w czasie przez okresowe IHealthCheckPublisher wykonywanie w celu zebrania wyników kondycji. Domyślnie wydawca:

  • Czeka 5 sekund po uruchomieniu aplikacji przed uruchomieniem kontroli kondycji.
  • Uruchamia testy kondycji co 30 sekund.

Interwały wydawcy można skonfigurować przy użyciu HealthCheckPublisherOptions polecenia podczas uruchamiania:

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

Wywoływanie usługi kontroli kondycji gRPC

Pakiet Grpc.HealthCheck zawiera klienta na potrzeby kontroli kondycji 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;

W usłudze Health istnieją dwie metody:

  • Check jest jednoargumentową metodą pobierania bieżącego stanu kondycji. Kontrole kondycji są wykonywane natychmiast po Check wywołaniu. Serwer zwraca NOT_FOUND odpowiedź o błędzie, jeśli klient żąda nieznanej nazwy usługi. Może się to zdarzyć podczas uruchamiania aplikacji, jeśli wyniki kondycji nie zostały jeszcze opublikowane.
  • Watch to metoda przesyłania strumieniowego, która zgłasza zmiany stanu kondycji w czasie. IHealthCheckPublisher jest okresowo wykonywany w celu zebrania wyników kondycji. Serwer zwraca Unknown stan, jeśli klient żąda nieznanej nazwy usługi.

Klient Grpc.HealthCheck może być używany w podejściu fabryki klienta:

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

W poprzednim przykładzie fabryka klienta dla Health.HealthClient wystąpień jest zarejestrowana w systemie wstrzykiwania zależności. Następnie te wystąpienia są wstrzykiwane do usług na potrzeby wykonywania wywołań kontroli kondycji.

Aby uzyskać więcej informacji, zobacz integracja fabryki klienta gRPC na platformie .NET.

Dodatkowe zasoby

Autor: James Newton-King

Protokół kontroli kondycji gRPC jest standardem raportowania kondycji aplikacji serwera gRPC.

Testy kondycji są udostępniane przez aplikację jako usługę gRPC. Są one zwykle używane z zewnętrzną usługą monitorowania w celu sprawdzenia stanu aplikacji. Usługę można skonfigurować dla różnych scenariuszy monitorowania w czasie rzeczywistym:

  • Sondy kondycji mogą być używane przez koordynatorów kontenerów i moduły równoważenia obciążenia w celu sprawdzenia stanu aplikacji. Na przykład platforma Kubernetes obsługuje liveness gRPC, gotowość i sondy uruchamiania. Platformę Kubernetes można skonfigurować do przekierowywania ruchu lub ponownego uruchamiania kontenerów w złej kondycji na podstawie wyników sprawdzania kondycji gRPC.
  • Użycie pamięci, dysku i innych zasobów serwera fizycznego można monitorować pod kątem stanu dobrej kondycji.
  • Testy kondycji mogą testować zależności aplikacji, takie jak bazy danych i zewnętrzne punkty końcowe usługi, w celu potwierdzenia dostępności i normalnego działania.

Konfigurowanie kontroli kondycji usługi gRPC

GRPC ASP.NET Core ma wbudowaną obsługę kontroli kondycji gRPC z pakietem Grpc.AspNetCore.HealthChecks . Wyniki kontroli kondycji platformy .NET są zgłaszane do osób wywołujących.

Aby skonfigurować kontrole kondycji gRPC w aplikacji:

  • Dodaj odwołanie do Grpc.AspNetCore.HealthChecks pakietu.
  • Zarejestruj usługę kontroli kondycji gRPC w programie Startup.cs:
    • AddGrpcHealthChecks do rejestrowania usług, które umożliwiają kontrole kondycji.
    • MapGrpcHealthChecksService aby dodać punkt końcowy usługi sprawdzania kondycji.
  • Dodaj kontrole kondycji, implementując IHealthCheck lub używając AddCheck metody .
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();
    });
}

Po skonfigurowaniu kontroli kondycji:

  • Usługa sprawdzania kondycji jest dodawana do aplikacji serwera.
  • Testy kondycji platformy .NET zarejestrowane w aplikacji są okresowo wykonywane w celu uzyskania wyników kondycji. Domyślnie po uruchomieniu aplikacji występuje 5-sekundowe opóźnienie, a następnie sprawdzanie kondycji jest wykonywane co 30 sekund. Interwał wykonywania kontroli kondycji można dostosować za pomocą polecenia HealthCheckPublisherOptions.
  • Wyniki kondycji określają, co raportuje usługa gRPC:
    • Unknown jest zgłaszany, gdy nie ma żadnych wyników dotyczących kondycji.
    • NotServingjest zgłaszany, gdy istnieją jakiekolwiek wyniki kondycji .HealthStatus.Unhealthy
    • Serving W przeciwnym razie jest zgłaszany.

Konfigurować Grpc.AspNetCore.HealthChecks

Domyślnie usługa kontroli kondycji gRPC używa wszystkich zarejestrowanych kontroli kondycji w celu określenia stanu kondycji. Kontrole kondycji gRPC można dostosować podczas rejestrowania w celu korzystania z podzbioru kontroli kondycji. Metoda MapService służy do mapowania wyników kondycji na nazwy usług wraz z predykatem na potrzeby filtrowania wyników kondycji:

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

Powyższy kod zastępuje usługę domyślną (""), aby używać tylko wyników kondycji z tagiem "public".

Testy kondycji gRPC obsługują klienta określając argument nazwy usługi podczas sprawdzania kondycji. Wiele usług jest obsługiwanych przez podanie nazwy usługi na :MapService

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

Nazwa usługi określona przez klienta jest zwykle domyślną ("") lub kwalifikowaną przez pakiet nazwą usługi w aplikacji. Jednak nic nie uniemożliwia klientowi używania dowolnych wartości do sprawdzania kondycji aplikacji.

Konfigurowanie interwału wykonywania testów kondycji

Testy kondycji są uruchamiane natychmiast po Check wywołaniu. Watch jest metodą przesyłania strumieniowego i ma inne zachowanie niż Check: Długotrwały strumień zgłasza wyniki kontroli kondycji w czasie przez okresowe IHealthCheckPublisher wykonywanie w celu zebrania wyników kondycji. Domyślnie wydawca:

  • Czeka 5 sekund po uruchomieniu aplikacji przed uruchomieniem kontroli kondycji.
  • Uruchamia testy kondycji co 30 sekund.

Interwały wydawcy można skonfigurować przy użyciu HealthCheckPublisherOptions polecenia podczas uruchamiania:

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

Wywoływanie usługi kontroli kondycji gRPC

Pakiet Grpc.HealthCheck zawiera klienta na potrzeby kontroli kondycji gRPC:

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

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

W usłudze Health istnieją dwie metody:

  • Check jest jednoargumentową metodą pobierania bieżącego stanu kondycji. Kontrole kondycji są wykonywane natychmiast po Check wywołaniu. Serwer zwraca NOT_FOUND odpowiedź o błędzie, jeśli klient żąda nieznanej nazwy usługi. Może się to zdarzyć podczas uruchamiania aplikacji, jeśli wyniki kondycji nie zostały jeszcze opublikowane.
  • Watch to metoda przesyłania strumieniowego, która zgłasza zmiany stanu kondycji w czasie. IHealthCheckPublisher jest okresowo wykonywany w celu zebrania wyników kondycji. Serwer zwraca Unknown stan, jeśli klient żąda nieznanej nazwy usługi.

Dodatkowe zasoby