gRPC-Integritätsprüfungen in ASP.NET Core
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Informationen zum aktuellen Release finden Sie in der .NET 8-Version dieses Artikels.
Das gRPC-Integritätsprüfungsprotokoll ist ein Standard zum Melden der Integrität von gRPC-Server-Apps.
Integritätsprüfungen werden von einer App als gRPC-Dienst verfügbar gemacht. Sie werden normalerweise mit einem externen Überwachungsdienst verwendet, der den Status einer App überprüft. Der Dienst kann für verschiedene Echtzeitüberwachungsszenarien konfiguriert werden:
- Integritätstests können von Containerorchestratoren und Lastenausgleichsmodulen verwendet werden, um den Status einer App zu überprüfen. Kubernetes unterstützt zum Beispiel gRPC-Live-, Bereitschafts- und Starttests. Kubernetes kann so konfiguriert werden, dass der Datenverkehr umgeleitet wird oder fehlerhafte Container auf Grundlage der Ergebnisse der gRPC-Integritätsprüfung neu gestartet werden.
- Die Nutzung von Arbeitsspeicher, Datenträgern und anderen physischen Serverressourcen kann auf einen fehlerfreien Status überwacht werden.
- Integritätsprüfungen können die Abhängigkeiten einer App testen, wie z.B. Datenbanken und externe Dienstendpunkte, um Verfügbarkeit und normale Funktionsweise zu bestätigen.
Einrichten von gRPC-Integritätsprüfungen
gRPC in ASP.NET Core bietet mit dem Paket Grpc.AspNetCore.HealthChecks
integrierte Unterstützung für gRPC-Integritätprüfungen. Ergebnisse von .NET-Integritätsprüfungen werden Aufrufern gemeldet.
So richten Sie gRPC-Integritätsprüfungen in einer App ein
- Fügen Sie einen
Grpc.AspNetCore.HealthChecks
-Paketverweis hinzu. - Registrieren Sie den gRPC-Integritätsüberprüfungsdienst:
AddGrpcHealthChecks
zum Registrieren von Diensten, die die Integritätsprüfungen ermöglichenMapGrpcHealthChecksService
, um einen Dienstendpunkt für Integritätsprüfungen hinzuzufügen
- Fügen Sie Integritätsprüfungen durch Implementieren von IHealthCheck oder Verwenden der Methode AddCheck hinzu.
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.
Wenn Integritätsprüfungen eingerichtet sind:
- Der Integritätsüberprüfungsdienst wird der Server-App hinzugefügt.
- Bei der App registrierte .NET-Integritätsprüfungen werden regelmäßig ausgeführt. Standardmäßig gibt es eine Verzögerung von 5 Sekunden nach dem Start der App, und dann werden alle 30 Sekunden Integritätsprüfungen ausgeführt. Das Ausführungsintervall der Integritätsprüfung kann mit
HealthCheckPublisherOptions
angepasst werden. - Die Ergebnisse bestimmen, was der gRPC-Dienst meldet:
Unknown
wird gemeldet, wenn es keine Integritätsergebnisse gibt.NotServing
wird gemeldet, wenn es Integritätsergebnisse des Typs HealthStatus.Unhealthy gibt.- Andernfalls wird
Serving
gemeldet.
Sicherheit des Integritätsüberprüfungsdienstes
gRPC-Überprüfungen geben den Integritätsstatus einer Anwendung zurück, bei dem es sich um sensible Informationen handeln könnte. Es sollte darauf geachtet werden, den Zugriff auf den gRPC-Integritätsüberprüfungsdienst einzuschränken.
Der Zugriff auf den Dienst kann über standardmäßige ASP.NET Core-Autorisierungserweiterungsmethoden wie z. B. AllowAnonymous
und RequireAuthorization
kontrolliert werden.
Wenn eine App beispielsweise so konfiguriert wurde, dass sie standardmäßig eine Autorisierung erfordert, konfigurieren Sie den gRPC-Endpunkt für Integritätsprüfungen mit AllowAnonymous
, um die Authentifizierung und Autorisierung zu überspringen.
app.MapGrpcHealthChecksService().AllowAnonymous();
Konfigurieren von Grpc.AspNetCore.HealthChecks
Standardmäßig verwendet der gRPC-Integritätsüberprüfungsdienst alle registrierten Integritätsprüfungen, um den Integritätsstatus zu bestimmen. gRPC-Integritätsprüfungen können bei der Registrierung so angepasst werden, dass eine Teilmenge der Integritätsprüfungen verwendet wird. Die Methode MapService
dient der Zuordnung von Integritätsergebnissen zu Dienstnamen und bietet außerdem ein Prädikat zu deren Filterung:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddGrpc();
builder.Services.AddGrpcHealthChecks(o =>
{
o.Services.MapService("", r => r.Tags.Contains("public"));
});
var app = builder.Build();
Der vorstehende Code überschreibt den Standarddienst (""
), um nur Integritätsergebnisse mit dem Tag „public“ zu verwenden.
gRPC-Integritätsprüfungen unterstützen den Client, der bei der Prüfung der Integrität ein Argument für den Dienstnamen angibt. Mehrere Dienste werden unterstützt, indem für MapService
ein Dienstname angegeben wird:
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();
Der vom Client angegebene Dienstname ist in der Regel der Standardname (""
) oder ein durch ein Paket qualifizierter Name eines Diensts in Ihrer App. Nichts hindert den Client jedoch daran, beliebige Werte zur Überprüfung der Anwendungsintegrität zu verwenden.
Konfigurieren des Ausführungsintervalls für Integritätsprüfungen
Integritätsprüfungen werden sofort ausgeführt, wenn Check
aufgerufen wird. Watch
ist eine Streamingmethode und weist ein anderes Verhalten als Check
auf: Der zeitintensive Stream meldet Integritätsprüfungsergebnisse im Laufe der Zeit, indem er regelmäßig IHealthCheckPublisher ausführt, um Integritätsergebnisse zu sammeln. Standardmäßig macht der Herausgeber Folgendes:
- Wartet 5 Sekunden nach dem Start der App, bevor Integritätsprüfungen ausgeführt werden.
- Führt alle 30 Sekunden Integritätsprüfungen aus.
Herausgeberintervalle können beim Start mit HealthCheckPublisherOptions konfiguriert werden:
builder.Services.Configure<HealthCheckPublisherOptions>(options =>
{
options.Delay = TimeSpan.Zero;
options.Period = TimeSpan.FromSeconds(10);
});
Aufrufen des gRPC-Integritätsüberprüfungsdiensts
Das Paket Grpc.HealthCheck
enthält einen Client für gRPC-Integritätsprüfungen:
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Health.HealthClient(channel);
var response = await client.CheckAsync(new HealthCheckRequest());
var status = response.Status;
Es gibt zwei Methoden für den Health
-Dienst:
Check
ist eine unäre Methode zum Abrufen des aktuellen Integritätsstatus. Integritätsprüfungen werden sofort ausgeführt, wennCheck
aufgerufen wird. Der Server gibt eineNOT_FOUND
-Fehlerantwort zurück, wenn der Client einen unbekannten Dienstnamen anfordert. Dies kann beim Start der App passieren, wenn die Integritätsergebnisse noch nicht veröffentlicht wurden.Watch
ist eine Streamingmethode, die Änderungen im Integritätsstatus im Laufe der Zeit meldet. IHealthCheckPublisher wird regelmäßig ausgeführt, um Integritätsergebnisse zu sammeln. Der Server gibt einenUnknown
-Status zurück, wenn der Client einen unbekannten Dienstnamen anfordert.
Der Grpc.HealthCheck
-Client kann in einem Clientfactory-Ansatz verwendet werden:
builder.Services
.AddGrpcClient<Health.HealthClient>(o =>
{
o.Address = new Uri("https://localhost:5001");
});
Im vorherigen Beispiel wird eine Clientfactory für Health.HealthClient
-Instanzen mit dem Abhängigkeitseinfügungssystem registriert. Anschließend werden diese Instanzen in Dienste zum Ausführen von Integritätsprüfungsaufrufen eingefügt.
Weitere Informationen finden Sie unter gRPC-Clientfactoryintegration in .NET.
Zusätzliche Ressourcen
Das gRPC-Integritätsprüfungsprotokoll ist ein Standard zum Melden der Integrität von gRPC-Server-Apps.
Integritätsprüfungen werden von einer App als gRPC-Dienst verfügbar gemacht. Sie werden normalerweise mit einem externen Überwachungsdienst verwendet, der den Status einer App überprüft. Der Dienst kann für verschiedene Echtzeitüberwachungsszenarien konfiguriert werden:
- Integritätstests können von Containerorchestratoren und Lastenausgleichsmodulen verwendet werden, um den Status einer App zu überprüfen. Kubernetes unterstützt zum Beispiel gRPC-Live-, Bereitschafts- und Starttests. Kubernetes kann so konfiguriert werden, dass der Datenverkehr umgeleitet wird oder fehlerhafte Container auf Grundlage der Ergebnisse der gRPC-Integritätsprüfung neu gestartet werden.
- Die Nutzung von Arbeitsspeicher, Datenträgern und anderen physischen Serverressourcen kann auf einen fehlerfreien Status überwacht werden.
- Integritätsprüfungen können die Abhängigkeiten einer App testen, wie z.B. Datenbanken und externe Dienstendpunkte, um Verfügbarkeit und normale Funktionsweise zu bestätigen.
Einrichten von gRPC-Integritätsprüfungen
gRPC in ASP.NET Core bietet mit dem Paket Grpc.AspNetCore.HealthChecks
integrierte Unterstützung für gRPC-Integritätprüfungen. Ergebnisse von .NET-Integritätsprüfungen werden Aufrufern gemeldet.
So richten Sie gRPC-Integritätsprüfungen in einer App ein
- Fügen Sie einen
Grpc.AspNetCore.HealthChecks
-Paketverweis hinzu. - Registrieren Sie den gRPC-Integritätsüberprüfungsdienst om
Startup.cs
:AddGrpcHealthChecks
zum Registrieren von Diensten, die die Integritätsprüfungen ermöglichenMapGrpcHealthChecksService
, um einen Dienstendpunkt für Integritätsprüfungen hinzuzufügen
- Fügen Sie Integritätsprüfungen durch Implementieren von IHealthCheck oder Verwenden der Methode AddCheck hinzu.
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();
});
}
Wenn Integritätsprüfungen eingerichtet sind:
- Der Integritätsüberprüfungsdienst wird der Server-App hinzugefügt.
- Bei der App registrierte .NET-Integritätsprüfungen werden regelmäßig ausgeführt. Standardmäßig gibt es eine Verzögerung von 5 Sekunden nach dem Start der App, und dann werden alle 30 Sekunden Integritätsprüfungen ausgeführt. Das Ausführungsintervall der Integritätsprüfung kann mit
HealthCheckPublisherOptions
angepasst werden. - Die Ergebnisse bestimmen, was der gRPC-Dienst meldet:
Unknown
wird gemeldet, wenn es keine Integritätsergebnisse gibt.NotServing
wird gemeldet, wenn es Integritätsergebnisse des Typs HealthStatus.Unhealthy gibt.- Andernfalls wird
Serving
gemeldet.
Konfigurieren von Grpc.AspNetCore.HealthChecks
Standardmäßig verwendet der gRPC-Integritätsüberprüfungsdienst alle registrierten Integritätsprüfungen, um den Integritätsstatus zu bestimmen. gRPC-Integritätsprüfungen können bei der Registrierung so angepasst werden, dass eine Teilmenge der Integritätsprüfungen verwendet wird. Die Methode MapService
dient der Zuordnung von Integritätsergebnissen zu Dienstnamen und bietet außerdem ein Prädikat zu deren Filterung:
services.AddGrpcHealthChecks(o =>
{
o.Services.MapService("", r => r.Tags.Contains("public"));
});
Der vorstehende Code überschreibt den Standarddienst (""
), um nur Integritätsergebnisse mit dem Tag „public“ zu verwenden.
gRPC-Integritätsprüfungen unterstützen den Client, der bei der Prüfung der Integrität ein Argument für den Dienstnamen angibt. Mehrere Dienste werden unterstützt, indem für MapService
ein Dienstname angegeben wird:
services.AddGrpcHealthChecks(o =>
{
o.Services.MapService("greet.Greeter", r => r.Tags.Contains("greeter"));
o.Services.MapService("count.Counter", r => r.Tags.Contains("counter"));
});
Der vom Client angegebene Dienstname ist in der Regel der Standardname (""
) oder ein durch ein Paket qualifizierter Name eines Diensts in Ihrer App. Nichts hindert den Client jedoch daran, beliebige Werte zur Überprüfung der Anwendungsintegrität zu verwenden.
Konfigurieren des Ausführungsintervalls für Integritätsprüfungen
Integritätsprüfungen werden sofort ausgeführt, wenn Check
aufgerufen wird. Watch
ist eine Streamingmethode und weist ein anderes Verhalten als Check
auf: Der zeitintensive Stream meldet Integritätsprüfungsergebnisse im Laufe der Zeit, indem er regelmäßig IHealthCheckPublisher ausführt, um Integritätsergebnisse zu sammeln. Standardmäßig macht der Herausgeber Folgendes:
- Wartet 5 Sekunden nach dem Start der App, bevor Integritätsprüfungen ausgeführt werden.
- Führt alle 30 Sekunden Integritätsprüfungen aus.
Herausgeberintervalle können beim Start mit HealthCheckPublisherOptions konfiguriert werden:
services.Configure<HealthCheckPublisherOptions>(options =>
{
options.Delay = TimeSpan.Zero;
options.Period = TimeSpan.FromSeconds(10);
});
Aufrufen des gRPC-Integritätsüberprüfungsdiensts
Das Paket Grpc.HealthCheck
enthält einen Client für gRPC-Integritätsprüfungen:
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Health.HealthClient(channel);
var response = client.CheckAsync(new HealthCheckRequest());
var status = response.Status;
Es gibt zwei Methoden für den Health
-Dienst:
Check
ist eine unäre Methode zum Abrufen des aktuellen Integritätsstatus. Integritätsprüfungen werden sofort ausgeführt, wennCheck
aufgerufen wird. Der Server gibt eineNOT_FOUND
-Fehlerantwort zurück, wenn der Client einen unbekannten Dienstnamen anfordert. Dies kann beim Start der App passieren, wenn die Integritätsergebnisse noch nicht veröffentlicht wurden.Watch
ist eine Streamingmethode, die Änderungen im Integritätsstatus im Laufe der Zeit meldet. IHealthCheckPublisher wird regelmäßig ausgeführt, um Integritätsergebnisse zu sammeln. Der Server gibt einenUnknown
-Status zurück, wenn der Client einen unbekannten Dienstnamen anfordert.