Comprobaciones de estado en .NET.NET Aspire
Los controles de salud proporcionan información de disponibilidad y estado sobre una aplicación. Las comprobaciones de estado a menudo se exponen como puntos de conexión HTTP, pero también pueden ser usadas internamente por la aplicación para escribir registros o realizar otras tareas basadas en el estado actual. Las comprobaciones de estado se suelen usar en combinación con un servicio de supervisión externo o un orquestador de contenedores para comprobar el estado de una aplicación. Los datos notificados por las comprobaciones de estado se pueden usar para varios escenarios:
- Influir en las decisiones tomadas por orquestadores de contenedores, equilibradores de carga, puertas de enlace de API y otros servicios de administración. Por ejemplo, si se produce un error en la comprobación de estado de una aplicación contendorizada, puede ser omitida por un balanceador de carga que enruta el tráfico.
- Compruebe que las dependencias subyacentes están disponibles, como una base de datos o caché, y devuelva un mensaje de estado adecuado.
- Desencadene alertas o notificaciones cuando una aplicación no responda según lo previsto.
puntos de conexión de comprobación de estado de .NET.NET Aspire
.NET
.NET Aspire expone dos puntos de conexión HTTP de comprobación de estado predeterminados en entornos de Development cuando se llama a los métodos AddServiceDefaults
y MapDefaultEndpoints
desde el archivo Program.cs:
El punto de conexión de
/health
indica si la aplicación se está ejecutando normalmente donde está listo para recibir solicitudes. Todas las comprobaciones de estado deben pasar para que, después de iniciarse, la aplicación se considere lista para aceptar el tráfico.GET /health
El punto de conexión de
/health
devuelve un código HTTP de estado 200 y un valortext/plain
de Healthy cuando la aplicación está saludable.El
/alive
indica si una aplicación está en ejecución o se ha bloqueado y debe reiniciarse. Solo las comprobaciones de salud etiquetadas con el tag activo deben superar para que la aplicación se considere activa.GET /alive
El punto de conexión de
/alive
devuelve un código de estado HTTP 200 y un valortext/plain
de Healthy cuando la aplicación está activa.
Los métodos AddServiceDefaults
y MapDefaultEndpoints
también aplican varias configuraciones a la aplicación más allá de solo comprobaciones de estado, como las configuraciones de detección de servicios OpenTelemetry y .
Entornos que no son de desarrollo
En entornos que no son de desarrollo, los puntos de conexión de /health
y /alive
están deshabilitados de forma predeterminada. Si necesita habilitarlos, se recomienda proteger estos puntos de conexión con varias características de enrutamiento, como el filtrado de host o la autorización. Para obtener más información, consulte Verificaciones de salud en ASP.NET Core.
Además, puede ser ventajoso configurar tiempos de espera de solicitud y almacenamiento en caché de salida para estos puntos de conexión para evitar ataques de abuso o denegación de servicio. Para ello, tenga en cuenta el siguiente método modificado AddDefaultHealthChecks
:
public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)
{
builder.Services.AddRequestTimeouts(
configure: static timeouts =>
timeouts.AddPolicy("HealthChecks", TimeSpan.FromSeconds(5)));
builder.Services.AddOutputCache(
configureOptions: static caching =>
caching.AddPolicy("HealthChecks",
build: static policy => policy.Expire(TimeSpan.FromSeconds(10))));
builder.Services.AddHealthChecks()
// Add a default liveness check to ensure app is responsive
.AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]);
return builder;
}
El código anterior:
- Agrega un tiempo de espera de 5 segundos a las solicitudes de comprobación de estado con una directiva denominada
HealthChecks
. - Agrega una caché de 10 segundos a las respuestas de comprobación de estado con una directiva denominada
HealthChecks
.
Ahora considere el método MapDefaultEndpoints
actualizado:
public static WebApplication MapDefaultEndpoints(this WebApplication app)
{
var healthChecks = app.MapGroup("");
healthChecks
.CacheOutput("HealthChecks")
.WithRequestTimeout("HealthChecks");
// All health checks must pass for app to be
// considered ready to accept traffic after starting
healthChecks.MapHealthChecks("/health");
// Only health checks tagged with the "live" tag
// must pass for app to be considered alive
healthChecks.MapHealthChecks("/alive", new()
{
Predicate = static r => r.Tags.Contains("live")
});
return app;
}
El código anterior:
- Agrupa los puntos de conexión de comprobación de estado en la ruta
/
. - Almacena en caché la salida y especifica un momento de la solicitud con la directiva de
HealthChecks
correspondiente.
Además de los métodos de AddDefaultHealthChecks
y MapDefaultEndpoints
actualizados, también debe agregar los servicios correspondientes para los tiempos de espera de solicitud y el almacenamiento en caché de salida.
En el punto de entrada adecuado de la aplicación (normalmente el archivo Program.cs), agregue el código siguiente:
// Wherever your services are being registered.
// Before the call to Build().
builder.Services.AddRequestTimeouts();
builder.Services.AddOutputCache();
var app = builder.Build();
// Wherever your app has been built, before the call to Run().
app.UseRequestTimeouts();
app.UseOutputCache();
app.Run();
Para obtener más información, consulte el middleware de tiempos de espera de solicitudes en en ASP.NET Core y el middleware de almacenamiento en caché de salidas en en ASP.NET Core.
Verificaciones de salud de integración
.NET
.NET Aspire integraciones pueden también registrar comprobaciones de estado adicionales para tu aplicación. Estas verificaciones de salud contribuyen al resultado devuelto de los puntos de conexión /health
y /alive
. Por ejemplo, la integración de .NET AspirePostgreSQL agrega automáticamente una comprobación de estado para comprobar las condiciones siguientes:
- Se podría establecer una conexión de base de datos
- Una consulta de base de datos se podría ejecutar correctamente
Si se produce un error en alguna de estas operaciones, también se produce un error en la comprobación de estado correspondiente.
Configuración de comprobaciones de estado
Puede deshabilitar las comprobaciones de estado de una integración determinada mediante una de las opciones de configuración disponibles. las integraciones de .NET.NET Aspire admiten Microsoft.Extensions.Configurations para aplicar la configuración mediante archivos de configuración tales como appsettings.json:
{
"Aspire": {
"Npgsql": {
"DisableHealthChecks": true,
}
}
}
También puede usar un delegado en línea para configurar comprobaciones de estado.
builder.AddNpgsqlDbContext<MyDbContext>(
"postgresdb",
static settings => settings.DisableHealthChecks = true);
Consulte también
- .NET comprobaciones de estado de la aplicación en C#
- comprobaciones de estado de en ASP.NET Core