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ě poCheck
zavolání. Server vrátí chybovouNOT_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ě poCheck
zavolání. Server vrátí chybovouNOT_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.