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.
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.NotServing
jest zgłaszany, gdy istnieją jakiekolwiek wyniki kondycji .HealthStatus.UnhealthyServing
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 poCheck
wywołaniu. Serwer zwracaNOT_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 zwracaUnknown
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.NotServing
jest zgłaszany, gdy istnieją jakiekolwiek wyniki kondycji .HealthStatus.UnhealthyServing
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 poCheck
wywołaniu. Serwer zwracaNOT_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 zwracaUnknown
stan, jeśli klient żąda nieznanej nazwy usługi.