.Net Core实现健康检查

ASP.NET Core 提供运行状况检查中间件和库,以用于报告应用基础结构组件的运行状况。

  • 运行状况探测可以由容器业务流程协调程和负载均衡器用于检查应用的状态。例如,容器业务流程协调程序可以通过停止滚动部署或重新启动容器来响应失败的运行状况检查。负载均衡器可以通过将流量从失败的实例路由到正常实例,来应对不正常的应用。

  • 可以监视内存、磁盘和其他物理服务器资源的使用情况来了解是否处于正常状态。

  • 运行状况检查可以测试应用的依赖项(如数据库和外部服务终结点)以确认是否可用和正常工作。

这个示例展示数据库的运行状态,他在其验证数据库连接并返回相应的结果

        [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状态代码的空消息。

640?wx_fmt=png

640?wx_fmt=png

现在基于这些结果状态码,我们可以监视系统采取相关的操作。

从.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来请求查看我们的应用程序的健康程度的。

640?wx_fmt=png

但是这样对于我们刚才的需求是满足不了的,那么我们如何自定义我们的健康度检查呢?

两种方式来处理

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();});}

在这里我们使用匿名方法AddCheck(),来编写我们的自定义的验证逻辑,结果是HealthCheckResult对象,该对象包含3个选项

  1. Healthy 健康

  2. Unhealthy 不良

  3. Degraded 降级

option 2

实现IHealthCheck接口并实现CheckHealthAsync()方法,如下所示:

   public class DatabaseHealthCheck : IHealthCheck{public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken =default){using (var connection = new SqlConnection("Server=.;Initial Catalog=master;Integrated Security=true")){try{connection.Open();}catch (SqlException){return  Task.FromResult(HealthCheckResult.Unhealthy());}}return Task.FromResult(HealthCheckResult.Healthy());}}

创建该类之后,我们需要通过使用一些有效的唯一名称,AddCheck ()方法在ConfigureServices()方法中提及该类,如下所示。

     public void ConfigureServices(IServiceCollection services){services.AddHealthChecks().AddCheck<DatabaseHealthCheck>("sql");}

现在我们的代码就写完了,我们可以像上面那样添加任意数量的Health Task,它将按照我们在此处声明的顺序运行。

自定义状态码

在之前我们也说过200为健康,503为不健康那么Healthcheck服务甚至通过以下方式使用其options对象提供自定义状态代码,为我们提供了更改此默认的状态码。

config.MapHealthChecks("/health", new HealthCheckOptions{ResultStatusCodes = new Dictionary<HealthStatus, int> { { HealthStatus.Unhealthy, 420 }, { HealthStatus.Healthy, 200 }, { HealthStatus.Degraded, 419 } }});

自定义输出

我们可以自定义输出,以获取有关每个运行状况检查任务的更清晰详细的信息。如果我们有多个运行状况检查任务来分析哪个任务使整个服务健康状态变为”不正常“,这将非常有用。

我们可以通过HealthCheckOptions ResponseWriter属性来实现。

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.UseRouting().UseEndpoints(config =>{config.MapHealthChecks("/health", new HealthCheckOptions{ResponseWriter=CustomResponseWriter});});}private static Task CustomResponseWriter(HttpContext context, HealthReport healthReport){context.Response.ContentType = "application/json";var result = JsonConvert.SerializeObject(new{status = healthReport.Status.ToString(),errors = healthReport.Entries.Select(e => new{key = e.Key,value = e.Value.Status.ToString()})});return context.Response.WriteAsync(result);}

640?wx_fmt=png

现在以json显示我们的详细信息,完成了健康状态的检查.

健康检查界面

Install-Package AspNetCore.HealthChecks.UI

安装完成后,需要相应地在ConfigureServices()和Configure()方法中调用相应的服务方法。

public void ConfigureServices(IServiceCollection services)  
{services.AddHealthChecksUI();
}public void Configure(IApplicationBuilder app, IHostingEnvironment env)  
{app.UseHealthChecksUI();
}

配置完成后,您可以运行应用程序并指向/ healthchecks-ui地址,该端点显示如下的UI.

640?wx_fmt=png

但是界面上没有我们刚才自定义的,那我们在进行配置

Appsetting.json

{"ApplicationInsights": {"InstrumentationKey": "your-instrumentation-key"},"Logging": {"LogLevel": {"Default": "Warning"}},"AllowedHosts": "*","HealthChecksUI": {"HealthChecks": [{"Name": "Test Health","Uri": "https://localhost:44342/health"}],"EvaluationTimeinSeconds": 10,"MinimumSecondsBetweenFailureNotifications": 60}
}

640?wx_fmt=png

这样就可以看到健康状态了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软宣布加入 OpenJDK,看网上各派的热闹

微软宣布加入 OpenJDK 项目&#xff08;https://www.oschina.net/news/111036/microsoft-to-participate-in-openidk&#xff09;&#xff0c;这两天在微信公众号里面有几种论调&#xff1a;上面这些都是Javaer的观点&#xff0c;在CSharper 对这件事情的反应更奇怪了&#xff…

这6点解释了罗永浩为什么要卖艺

01是的&#xff0c;我们的‘老赖又上热搜了。&#xff08;ps:还是传统的语法&#xff0c;换了个人而已&#xff0c;味道有点改变&#xff09;11 月 3 日下午&#xff0c;罗永浩因锤子科技的 375 万欠款被江苏丹阳法院限制高消费&#xff0c;他不得乘坐飞机头等舱、软卧、高铁等…

微软发布研究报告:企业数据管理普遍混乱,揭秘大数据分析趋势以及PowerBI的崛起机遇...

本文非常重要&#xff0c;忽略者责任自负。我们时常看到很多新闻说企业的数据分析或大数据如何如何高大上&#xff0c;但你自己感觉你自己所处的环境呢&#xff1f;很多小伙伴在群里真切的抱怨到&#xff1a;感觉是一坨祥云。为什么你看到的和你感受到的有如此巨大的反差&#…

Magicodes.Pay,打造开箱即用的统一支付库,已提供ABP模块封装

Magicodes.Pay&#xff0c;打造开箱即用的统一支付库&#xff0c;已提供ABP模块封装简介Magicodes.Pay&#xff0c;是心莱科技团队提供的统一支付库&#xff0c;相关库均使用.NET标准库编写&#xff0c;支持.NET Framework以及.NET Core。目前已提供Abp模块的封装&#xff0c;支…

在.NET Core 3.0中发布单个Exe文件(PublishSingleFile)

假设我有一个简单的“ Hello World”控制台应用程序&#xff0c;我想发送给朋友来运行。朋友没有安装.NET Core&#xff0c;所以我知道我需要为他构建一个独立的应用程序。很简单&#xff0c;我只需在项目目录中运行以下命令&#xff1a;dotnet publish -r win-x64 -c Release …

python import 问题

https://my.oschina.net/leejun2005/blog/109679 python中&#xff0c;每个py文件被称之为模块&#xff0c;每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中&#xff0c;就可以使用import 模块或import 包来使用。 如果想使用非当前模块中的…

.NET如何写正确的“抽奖”——数组乱序算法

.NET如何写正确的“抽奖”——数组乱序算法数组乱序算法常用于抽奖等生成临时数据操作。就拿年会抽奖来说&#xff0c;如果你的算法有任何瑕疵&#xff0c;造成了任何不公平&#xff0c;在年会现场 code review时&#xff0c;搞不好不能活着走出去。这个算法听起来很简单&#…

maximum mean discrepancy

http://blog.csdn.net/a1154761720/article/details/51516273 MMD&#xff1a;maximum mean discrepancy。最大平均差异。最先提出的时候用于双样本的检测&#xff08;two-sample test&#xff09;问题&#xff0c;用于判断两个分布p和q是否相同。它的基本假设是&#xff1a;如…

FineUICore基础版部署到docker实战

文 | 蒙古海军司令 合作者FineUI用了好多年&#xff0c;最近出了FineUICore版本&#xff0c;一直没时间是试一下docker&#xff0c;前几天买了一个腾讯云服务器&#xff0c;1核2g&#xff0c;装了centos7.6&#xff0c;开始的时候主要是整个个人博客&#xff0c;在腾讯云安装了…

2019全球Microsoft 365开发者训练营(北京站)

Microsoft365介绍&#xff1a;Microsoft365不仅仅是Office 365&#xff0c;它还包括Windows 10操作系统&#xff0c;以及诸多企业级移动和安全应用。它是一套可用于从小型到集团化企业的办公、协作、沟通的企业信息化解决方案。在2017年7月11日举行的Inspire年度合作伙伴大会上…

caffe/common.cu error: function atomicadd has already been defined

http://blog.csdn.NET/houqiqi/article/details/46469981 1, 下载matio(http://sourceforge.NET/projects/matio/) 2,&#xff0c;安装 $ tar zxf matio-X.Y.Z.tar.gz $ cd matio-X.Y.Z $ ./configure $ make $ make check $ make install sudo ldconfig (如果不执行&#x…

微软备战 RPA 市场,Power Platform,Ready GO!

最大赌注就在刚刚&#xff0c;微软在 Microsoft Ignite 2019 大会上&#xff0c;首席执行官萨蒂亚纳德拉&#xff08;Satya Nadella&#xff09;宣布了 Microsoft Power Platform 新平台的发布&#xff0c;并且说到&#xff1a;在与Azure合作方面&#xff0c;微软365&#xff0…

C# 8 新特性 - 只读struct成员

从C# 8开始&#xff0c;我们可以在struct的成员上使用readonly修饰符。 为struct的成员添加readonly修饰符就表示告诉编译器和开发者该成员不可以修改struct的状态。 看下面这个例子&#xff1a; 这里的ToString()方法不会修改Point这个struct的状态&#xff0c;所以我们可以在…

.NET Core 3.0 中间件 Middleware

中间件官网文档解释&#xff1a;中间件是一种装配到应用管道以处理请求和响应的软件 每个中间件&#xff1a;选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。使用 IApplicationBuilder 创建中间件管道ASP.NET Core 请求管道包含一系列请求委托&…

重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境

今天&#xff08;北京时间 2019 年 11 月 4 日&#xff09;&#xff0c;在 Microsoft Ignite 2019 大会上&#xff0c;微软正式发布了 Visual Studio Online 公开预览版&#xff01;概览Visual Studio Online 提供了由云服务支撑的开发环境。无论是一个长期项目&#xff0c;或是…

Ubuntu Linux将支持所有树莓派设备

Canonical 近期公开了对 Raspberry Pi 4 的支持计划&#xff0c;并表示将支持所有 Raspberry Pi 设备。随着 Ubuntu Server 19.10 版本的发布&#xff0c;Canonical 宣布正式支持 Raspberry Pi 4&#xff0c;Raspberry Pi 4 性能强大&#xff0c;但成本较低&#xff0c;可以在边…

面试官:你连RESTful都不知道我怎么敢要你?

加个“星标★”&#xff0c;每天11.50&#xff0c;好文必达全文约4000字&#xff0c;预计阅读时间8分钟面试官&#xff1a;了解RESTful吗&#xff1f;01 前言回归正题&#xff0c;看过很多RESTful相关的文章总结&#xff0c;参齐不齐&#xff0c;结合工作中的使用&#xff0c;非…

深入理解.NET Core的基元(二) - 共享框架

原文&#xff1a;Deep-dive into .NET Core primitives, part 2: the shared framework作者&#xff1a;Nate McMaster[1] 译文&#xff1a;深入理解.NET Core的基元&#xff08;二&#xff09; - 共享框架 作者&#xff1a;Lamond Lu本篇是之前翻译过的《深入理解.NET Core的基…

net core WebApi——使用xUnits来实现单元测试

前言从开始敲代码到现在&#xff0c;不停地都是在喊着记得做测试&#xff0c;记得自测&#xff0c;测试人员打回来扣你money之类的&#xff0c;刚开始因为心疼钱&#xff08;当然还是为了代码质量&#xff09;&#xff0c;就老老实实自己写完自己跑一遍&#xff0c;没有流程没有…

python利用opencv标注bounding box

http://blog.csdn.net/xieqiaokang/article/details/60780608 1. 函数 用 OpenCV 标注 bounding box 主要用到下面两个工具——cv2.rectangle() 和 cv2.putText()。用法如下&#xff1a; # cv2.rectangle() # 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细 cv2…