华域联盟 .Net 详解如何在ASP.Net Core中实现健康检查

详解如何在ASP.Net Core中实现健康检查

详解如何在ASP.Net Core中实现健康检查
 更新时间:2021年03月16日 11:35:24   作者:码农读书  

这篇文章主要介绍了详解如何在ASP.Net Core中实现健康检查,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态。
ASP.Net Core 中的 健康检查 落地做法是暴露一个可配置的 Http 端口,你可以使用 健康检查 去做一个最简单的活性检测,比如说:检查网络和系统的资源可用性,数据库资源是否可用,应用程序依赖的消息中间件或者 Azure cloud service 的可用性 等等,这篇文章我们就来讨论如何使用这个 健康检查中间件。
注册健康检查服务
要注册 健康检查 服务,需要在 Startup.ConfigureServices 下调用 AddHealthChecks 方法,然后使用 UseHealthChecks 将其注入到 Request Pipeline 管道中,如下代码所示:

public class Startup
{

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();

services.AddHealthChecks();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHealthChecks("/health");

app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}

上图的 /health 就是一个可供检查此 web 是否存活的暴露端口。
其他服务的健康检查
除了web的活性检查,还可以检查诸如:SQL Server, MySQL, MongoDB, Redis, RabbitMQ, Elasticsearch, Hangfire, Kafka, Oracle, Azure Storage 等一系列服务应用的活性,每一个服务需要引用相关的 nuget 包即可,如下图所示:

然后在 ConfigureServices 中添加相关服务即可,比如下面代码的 AddSqlServer。

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();

services.AddHealthChecks().AddSqlServer("server=.;database=PYZ_L;Trusted_Connection=SSPI");
}

自定义健康检查
除了上面的一些开源方案,还可以自定义实现 健康检查 类,比如自定义方式来检测 数据库 或 外部服务 的可用性,那怎么实现呢? 只需要实现系统内置的 IHealthCheck 接口并实现 CheckHealthAsync() 即可,如下代码所示:

public class MyCustomHealthCheck : IHealthCheck
{
public async Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context,
CancellationToken cancellationToken = default(CancellationToken))
{
bool canConnect = IsDBOnline();

if (canConnect)
return HealthCheckResult.Healthy();
return HealthCheckResult.Unhealthy();
}
}

这里的 IsDBOnline 方法用来判断当前数据库是否是运行状态,实现代码如下:

private bool IsDBOnline()
{
string connectionString = "server=.;database=PYZ_L;Trusted_Connection=SSPI";

try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
if (connection.State != System.Data.ConnectionState.Open) connection.Open();
}

return true;
}
catch (System.Exception)
{
return false;
}
}

然后在 ConfigureServices 方法中进行注入。

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHealthChecks().AddCheck<MyCustomHealthCheck>("sqlcheck");
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting().UseEndpoints(config =>
{
config.MapHealthChecks("/health");
});

app.UseStaticFiles();
app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}

接下来可以浏览下 /health 页面,可以看出该端口自动执行了你的 MyCustomHealthCheck 方法,如下图所示:

可视化健康检查
上面的检查策略虽然好,但并没有一个好的可视化方案,要想实现可视化的话,还需要单独下载 Nuget 包: AspNetCore.HealthChecks.UI , HealthChecks.UI.Client 和 AspNetCore.HealthChecks.UI.InMemory.Storage,命令如下:

Install-Package AspNetCore.HealthChecks.UI
Install-Package AspNetCore.HealthChecks.UI.Client
Install-Package AspNetCore.HealthChecks.UI.InMemory.Storage

一旦包安装好之后,就可以在 ConfigureServices 和 Configure 方法下做如下配置。

public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHealthChecks();
services.AddHealthChecksUI().AddInMemoryStorage();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{

app.UseRouting().UseEndpoints(config =>
{
config.MapHealthChecks("/health", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
});

app.UseHealthChecksUI();

app.UseStaticFiles();

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}

最后还要在 appsettings.json 中配一下 HealthChecks-UI 中的检查项,如下代码所示:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"HealthChecks-UI": {
"HealthChecks": [
{
"Name": "Local",
"Uri": "localhost:65348/health"
}
],
"EvaluationTimeOnSeconds": 10,
"MinimumSecondsBetweenFailureNotifications": 60
}
}

最后在浏览器中输入 /healthchecks-ui 看一下 可视化UI 长成啥样。

使用 ASP.Net Core 的 健康检查中间件 可以非常方便的对 系统资源,数据库 或者其他域外资源进行监控,你可以使用自定义检查逻辑来判断什么样的情况算是 Healthy,什么样的算是 UnHealthy,值得一提的是,当检测到失败时还可以使用失败通知机制,类似 github 发布钩子。
译文链接:www.infoworld.com/article/3379187/how-to-implement-health-checks-in-aspnet-core.html
到此这篇关于详解如何在ASP.Net Core中实现健康检查的文章就介绍到这了,更多相关ASP.Net Core 健康检查内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:发布asp.net core时如何修改ASPNETCORE_ENVIRONMENT环境变量ASP.NET Core扩展库之Http日志的使用详解ASP.NET Core自动生成小写破折号路由的实现方法如何在ASP.NET Core中使用HttpClientFactory如何在ASP.Net Core中使用SerilogASP.NET Core 5中如何生成PDF文档ASP.NET Core扩展库之实体映射使用详解如何在ASP.NET Core中使用ViewComponent

ASP.Net
Core
健康检查

相关文章
ASP.NET对无序列表批量操作的三种方法小结在网页开发中,经常要用到无序列表。事实上在符合W3C标准的div+css布局中,无序列表被大量使用,ASP.NET虽然内置了BulletedList控件,用于创建和操作无序列表,但感觉不太好用 2012-01-01
.Net中的序列化和反序列化详解这篇文章主要介绍了.Net中的序列化和反序列化详解的相关资料,需要的朋友可以参考下 2016-04-04
通过C#动态生成图书信息XML文件通过C#动态生成图书信息XML文件,下面有个不错的示例,需要的朋友可以参考下 2013-11-11
C# Quoted-Printable编码、解码Class for encoding and decoding a string to QuotedPrintable 2008-12-12
实现文件和文件夹的复制的方法本文主要分享了实现文件和文件夹的复制的示例代码,具有一定的参考价值,下面跟着小编一起来看下吧 2016-12-12
GridView多层嵌套和折叠与展开(修改适合自己使用)这个功能的GridView多层嵌套没有问题,因为已经做了无限次数,但是折叠与展开的功能,却花上不少时间(网上找资料),虽找到资料可参考,还是了解明它,并修改适合自己程序使用,感兴趣的朋友可以了解下 2013-01-01
详解ASP.NET Core实现强类型Configuration读取配置数据本篇文章主要介绍了详解ASP.NET Core实现强类型Configuration读取配置数据 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2017-05-05
利用Builder方式创建对象示例代码这篇文章主要给大家介绍了关于利用Builder方式创建对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2018-11-11
Json.net日期格式化设置方式这篇文章主要介绍了Json.net日期格式化设置方式,文中给大家补充介绍了json.net 使用属性定义日期的序列化格式,需要的朋友可以参考下 2018-11-11
jQuery调用WebService返回JSON数据及参数设置注意问题.NET Framework 3.5的发布解决了WebService调用中json问题,本文将介绍jQuery调用基于.NET Framework 3.5的WebService返回JSON数据,感兴趣的朋友可以了解下,希望本文对你有所帮助 2013-01-01

最新评论

本文由 华域联盟 原创撰写:华域联盟 » 详解如何在ASP.Net Core中实现健康检查

转载请保留出处和原文链接:https://www.cnhackhy.com/4957.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部