ASP.NET Core 提供运行状况检查中间件和库,以用于报告应用基础结构组件的运行状况。
运行状况检查由应用程序作为 HTTP 终结点公开。 可以为各种实时监视方案配置运行状况检查终结点:
运行状况探测可以由容器业务流程协调程和负载均衡器用于检查应用的状态。 例如,容器业务流程协调程序可以通过停止滚动部署或重新启动容器来响应失败的运行状况检查。 负载均衡器可以通过将流量从失败的实例路由到正常实例,来应对不正常的应用。 可以监视内存、磁盘和其他物理服务器资源的使用情况来了解是否处于正常状态。 运行状况检查可以测试应用的依赖项(如数据库和外部服务终结点)以确认是否可用和正常工作。这个示例展示数据库的运行状态,他在其验证数据库连接并返回相应的结果
[Route("health")]
public ActionResult Health()
{
using (var connection = new SqlConnection("Server=.;Initial Catalog=master;Integrated Security=true"))
{
try
{
connection.Open();
}
catch (SqlException)
{
return new StatusCodeResult(503);
}
}
return new EmptyResult();
}
当我们请求该地址的时候时,如果连接到数据库时出现任何连接问题,它将显示一条包含200状态代码和503状态代码的空消息。


现在基于这些结果状态码,我们可以监视系统采取相关的操作。
从.NET Core2.2开始,我们不需要为运行状态在去自定义检查控制器和接口,而是框架本身已经为我们提供了运行状况的检查服务。
安装和运行
Install-Package Microsoft.Extensions.Diagnostics.HealthChecks
安装后,我们需要在Startup.cs文件的ConfigureServices()和Configure()方法中添加。
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app
.UseHealthChecks("/health");
}
我们在configure()方法中配置完端点后,我们就可以通过 /health 来请求查看我们的应用程序的健康程度的。

但是这样对于我们刚才的需求是满足不了的,那么我们如何自定义我们的健康度检查呢?
两种方式来处理
option 1
public void ConfigureServices(IServiceCollection services)
{
services.AddHealthChecks()
.AddCheck("sql", () =>
{
using (var connection = new SqlConnection("Server=.;Initial Catalog=master;Integrated Security=true"))
{
try
{
connection.Open();
}
catch (SqlException)
{
return HealthCheckResult.Unhealthy();
}
}
return HealthCheckResult.Healthy();
});
}








