Sdílet prostřednictvím


Kontroly stavu gRPC v ASP.NET Core

Poznámka:

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.

Upozorňující

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.

Důležité

Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.

Aktuální verzi najdete v tomto článku ve verzi .NET 9.

Autor: James Newton-King

Protokol kontroly stavu gRPC je standard pro hlášení stavu serverových aplikací gRPC.

Kontroly stavu jsou zpřístupněny aplikací jako službou gRPC. Obvykle se používají s externí monitorovací službou ke kontrole stavu aplikace. Službu je možné nakonfigurovat pro různé scénáře monitorování v reálném čase:

  • Sondy stavu můžou používat orchestrátory kontejnerů a nástroje pro vyrovnávání zatížení ke kontrole stavu aplikace. Kubernetes například podporuje aktivity gRPC, připravenost a spouštěcí testy. Kubernetes je možné nakonfigurovat tak, aby přesměroval provoz nebo restartoval kontejnery, které nejsou v pořádku, na základě výsledků kontroly stavu gRPC.
  • Použití paměti, disku a dalších prostředků fyzického serveru je možné monitorovat, aby byl stav v pořádku.
  • Kontroly stavu můžou otestovat závislosti aplikace, jako jsou databáze a koncové body externí služby, a ověřit dostupnost a normální fungování.

Nastavení kontrol stavu gRPC

gRPC ASP.NET Core má integrovanou podporu kontrol stavu gRPC s balíčkem Grpc.AspNetCore.HealthChecks . Volajícím se hlásí výsledky kontrol stavu .NET.

Nastavení kontrol stavu gRPC v aplikaci:

  • Přidejte odkaz na Grpc.AspNetCore.HealthChecks balíček.
  • Zaregistrovat službu kontroly stavu gRPC:
    • AddGrpcHealthChecks registrace služeb, které umožňují kontroly stavu.
    • MapGrpcHealthChecksService přidání koncového bodu služby kontroly stavu.
  • Přidejte kontroly stavu implementací IHealthCheck nebo použitím 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.

Při nastavování kontrol stavu:

  • Služba kontroly stavu se přidá do serverové aplikace.
  • Kontroly stavu .NET zaregistrované v aplikaci se pravidelně spouštějí pro výsledky stavu. Ve výchozím nastavení dochází po spuštění aplikace k 5sekundovým zpožděním a následné kontroly stavu se provádějí každých 30 sekund. Interval provádění kontroly stavu lze přizpůsobit pomocí HealthCheckPublisherOptions.
  • Výsledky stavu určují, co služba gRPC hlásí:
    • Unknown pokud neexistují žádné výsledky stavu, zobrazí se hlášení.
    • NotServing je hlášena, pokud jsou k dispozici nějaké výsledky HealthStatus.Unhealthystavu .
    • Serving V opačném případě se nahlásí.

Zabezpečení služby kontroly stavu

Kontroly stavu gRPC vrací stav aplikace, což může být citlivé informace. Je třeba dbát na omezení přístupu ke službě kontroly stavu gRPC.

Přístup ke službě lze řídit standardními metodami rozšíření autorizace ASP.NET Core, jako AllowAnonymous je například a RequireAuthorization.

Pokud je například aplikace nakonfigurovaná tak, aby ve výchozím nastavení vyžadovala autorizaci, nakonfigurujte koncový bod AllowAnonymous kontroly stavu gRPC tak, aby přeskočil ověřování a autorizaci.

app.MapGrpcHealthChecksService().AllowAnonymous();

Konfigurovat Grpc.AspNetCore.HealthChecks

Ve výchozím nastavení služba kontroly stavu gRPC používá všechny registrované kontroly stavu k určení stavu. Kontroly stavu gRPC je možné přizpůsobit při registraci tak, aby používaly podmnožinu kontrol stavu. Metoda MapService se používá k mapování výsledků stavu na názvy služeb spolu s predikátem pro filtrování výsledků stavu:

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

Předchozí kód přepíše výchozí službu ("") tak, aby používala pouze výsledky stavu se značkou "public".

Kontroly stavu gRPC podporují klienta, který při kontrole stavu určuje argument názvu služby. Více služeb je podporováno poskytnutím názvu služby: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();

Název služby určený klientem je obvykle výchozí ("") nebo kvalifikovaný název služby ve vaší aplikaci. Klientovi ale nic nebrání v použití libovolných hodnot ke kontrole stavu aplikace.

Konfigurace intervalu provádění kontrol stavu

Kontroly stavu se spustí okamžitě po Check zavolání. Watch je metoda streamování a má jiné chování než Check: Dlouhotrvající stream hlásí výsledky kontrol stavu v průběhu času tím, že pravidelně provádí IHealthCheckPublisher shromažďování výsledků stavu. Ve výchozím nastavení vydavatel:

  • Před spuštěním kontrol stavu počká 5 sekund po spuštění aplikace.
  • Spustí kontroly stavu každých 30 sekund.

Intervaly vydavatele je možné nakonfigurovat při HealthCheckPublisherOptions spuštění:

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

Volání služby kontroly stavu gRPC

Balíček Grpc.HealthCheck obsahuje klienta pro kontroly stavu 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;

Ve službě Health existují dvě metody:

  • Check je unární metoda pro získání aktuálního stavu. Kontroly stavu se spustí okamžitě po Check zavolání. Server vrátí chybovou NOT_FOUND odpověď, pokud klient požádá o neznámý název služby. K tomu může dojít při spuštění aplikace, pokud se výsledky stavu ještě nepublikovaly.
  • Watch je metoda streamování, která hlásí změny stavu v průběhu času. IHealthCheckPublisher se pravidelně spouští za účelem shromáždění výsledků stavu. Server vrátí Unknown stav, pokud klient požádá o neznámý název služby.

Klienta Grpc.HealthCheck je možné použít v přístupu ke klientské továrně:

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

V předchozím příkladu je klientská továrna pro Health.HealthClient instance zaregistrovaná v systému injektáže závislostí. Tyto instance se pak vloží do služeb pro provádění volání kontroly stavu.

Další informace najdete v tématu integrace klientské továrny gRPC v .NET.

Další materiály

Autor: James Newton-King

Protokol kontroly stavu gRPC je standard pro hlášení stavu serverových aplikací gRPC.

Kontroly stavu jsou zpřístupněny aplikací jako službou gRPC. Obvykle se používají s externí monitorovací službou ke kontrole stavu aplikace. Službu je možné nakonfigurovat pro různé scénáře monitorování v reálném čase:

  • Sondy stavu můžou používat orchestrátory kontejnerů a nástroje pro vyrovnávání zatížení ke kontrole stavu aplikace. Kubernetes například podporuje aktivity gRPC, připravenost a spouštěcí testy. Kubernetes je možné nakonfigurovat tak, aby přesměroval provoz nebo restartoval kontejnery, které nejsou v pořádku, na základě výsledků kontroly stavu gRPC.
  • Použití paměti, disku a dalších prostředků fyzického serveru je možné monitorovat, aby byl stav v pořádku.
  • Kontroly stavu můžou otestovat závislosti aplikace, jako jsou databáze a koncové body externí služby, a ověřit dostupnost a normální fungování.

Nastavení kontrol stavu gRPC

gRPC ASP.NET Core má integrovanou podporu kontrol stavu gRPC s balíčkem Grpc.AspNetCore.HealthChecks . Volajícím se hlásí výsledky kontrol stavu .NET.

Nastavení kontrol stavu gRPC v aplikaci:

  • Přidejte odkaz na Grpc.AspNetCore.HealthChecks balíček.
  • Zaregistrovat službu kontroly stavu gRPC v Startup.cs:
    • AddGrpcHealthChecks registrace služeb, které umožňují kontroly stavu.
    • MapGrpcHealthChecksService přidání koncového bodu služby kontroly stavu.
  • Přidejte kontroly stavu implementací IHealthCheck nebo použitím 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();
    });
}

Při nastavování kontrol stavu:

  • Služba kontroly stavu se přidá do serverové aplikace.
  • Kontroly stavu .NET zaregistrované v aplikaci se pravidelně spouštějí pro výsledky stavu. Po spuštění aplikace ve výchozím nastavení dochází k 5sekundovým zpožděním a po 30 sekundách se spustí kontroly stavu. Interval provádění kontroly stavu lze přizpůsobit pomocí HealthCheckPublisherOptions.
  • Výsledky stavu určují, co služba gRPC hlásí:
    • Unknown pokud neexistují žádné výsledky stavu, zobrazí se hlášení.
    • NotServing je hlášena, pokud jsou k dispozici nějaké výsledky HealthStatus.Unhealthystavu .
    • Serving V opačném případě se nahlásí.

Konfigurovat Grpc.AspNetCore.HealthChecks

Ve výchozím nastavení služba kontroly stavu gRPC používá všechny registrované kontroly stavu k určení stavu. Kontroly stavu gRPC je možné přizpůsobit při registraci tak, aby používaly podmnožinu kontrol stavu. Metoda MapService se používá k mapování výsledků stavu na názvy služeb spolu s predikátem pro filtrování výsledků stavu:

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

Předchozí kód přepíše výchozí službu ("") tak, aby používala pouze výsledky stavu se značkou "public".

Kontroly stavu gRPC podporují klienta, který při kontrole stavu určuje argument názvu služby. Více služeb je podporováno poskytnutím názvu služby:MapService

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

Název služby určený klientem je obvykle výchozí ("") nebo kvalifikovaný název služby ve vaší aplikaci. Klientovi ale nic nebrání v použití libovolných hodnot ke kontrole stavu aplikace.

Konfigurace intervalu provádění kontrol stavu

Kontroly stavu se spustí okamžitě po Check zavolání. Watch je metoda streamování a má jiné chování než Check: Dlouhotrvající stream hlásí výsledky kontrol stavu v průběhu času tím, že pravidelně provádí IHealthCheckPublisher shromažďování výsledků stavu. Ve výchozím nastavení vydavatel:

  • Před spuštěním kontrol stavu počká 5 sekund po spuštění aplikace.
  • Spustí kontroly stavu každých 30 sekund.

Intervaly vydavatele je možné nakonfigurovat při HealthCheckPublisherOptions spuštění:

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

Volání služby kontroly stavu gRPC

Balíček Grpc.HealthCheck obsahuje klienta pro kontroly stavu gRPC:

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

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

Ve službě Health existují dvě metody:

  • Check je unární metoda pro získání aktuálního stavu. Kontroly stavu se spustí okamžitě po Check zavolání. Server vrátí chybovou NOT_FOUND odpověď, pokud klient požádá o neznámý název služby. K tomu může dojít při spuštění aplikace, pokud se výsledky stavu ještě nepublikovaly.
  • Watch je metoda streamování, která hlásí změny stavu v průběhu času. IHealthCheckPublisher se pravidelně spouští za účelem shromáždění výsledků stavu. Server vrátí Unknown stav, pokud klient požádá o neznámý název služby.

Další materiály