asp.net core健康检查是监控应用状态的轻量机制,需配置检查项、暴露端点并按场景定制;支持就绪/存活区分、自定义检查及k8s/prometheus集成。
ASP.NET Core 的健康检查(Health Checks)是监控应用运行状态的轻量级机制,能快速识别服务是否就绪、是否存活、依赖是否可用。它不复杂但容易忽略细节,关键是配置好检查项、暴露端点、并结合实际场景定制逻辑。
启用健康检查中间件
在 Program.cs 中注册健康检查服务并添加中间件:
- 调用 AddHealthChecks() 注册服务,可链式添加各种检查器(如数据库、HTTP、磁盘等)
- 调用 MapHealthChecks() 暴露 HTTP 端点,支持自定义路径、响应格式和授权
示例:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHealthChecks()
.AddSqlServer(connectionString: "Server=...;Database=Test;...")
.AddRedis("localhost:6379", name: "redis-cache")
.AddProcessHostedServiceCheck(); // 自定义检查:确认后台服务是否启动
var app = builder.Build();
app.MapHealthChecks("/health", new HealthCheckOptions
{
ResponseWriter = async (ctx, report) =>
{
ctx.Response.ContentType = "application/json";
await JsonSerializer.SerializeAsync(ctx.Response.Body, report, new JsonSerializerOptions { WriteIndented = true });
}
});
定义自定义健康检查
当内置检查器不满足需求时(比如检查第三方 API 可用性、文件写入权限、配置有效性),可实现 IHealthCheck 接口:
- 重写 CheckHealthAsync 方法,执行检测逻辑
- 返回 HealthCheckResult.Healthy()、.Unhealthy() 或 .Degraded()
- 可传入描述、异常、数据字典(用于输出诊断信息)
例如检查某个配置项是否存在:
public class ConfigHealthCheck : IHealthCheck
{
private readonly IConfiguration _config;
public ConfigHealthCheck(IConfiguration config) => _config = config;
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
var value = _config["ExternalApi:BaseUrl"];
return Task.FromResult(string.IsNullOrWhiteSpace(value)
? HealthCheckResult.Unhealthy("External API base URL is missing.")
: HealthCheckResult.Healthy());
}
}
然后注册:services.AddHealthChecks().AddCheck(“config-check”);