.NET6之MiniAPI(十三):健康检查

程序员开发程序,是“”的过程,运维人员负责日常运维,是“”的过程,在养的过程,运维人员希望在第一时间了解程序的状况,健康检查,是最基础的手段。

var builder = WebApplication.CreateBuilder(args);
//注入健康检查服务
builder.Services.AddHealthChecks();
var app = builder.Build();
app.MapGet("/test", () =>
{    return DateTime.Now;
});
//添加中间件,设置健康检查的访问路径是/health
app.MapHealthChecks("/health");
app.Run();

fd0a3ea9b4e2989ee1ccff80a773e016.png

还可以通过重写来改变返回的字符串:

app.MapHealthChecks("/health", new HealthCheckOptions
{ResponseWriter = (context, result) =>{var backContent = "this is health";return context.Response.WriteAsync(backContent);}
});

当然,这样的健康检查只是host有没有启动,如果有更深层次的检查,可以通过实现IHealthCheck来实现。

using Microsoft.Extensions.Diagnostics.HealthChecks;var builder = WebApplication.CreateBuilder(args);
//注入自定义健康检查类
builder.Services.AddHealthChecks().AddCheck<TestHealthCheck>("test_health_check");
var app = builder.Build();
app.MapGet("/test", () =>
{return DateTime.Now;
});
//添加中间件,设置健康检查的访问路径是/health
app.MapHealthChecks("/health");
app.Run();public class TestHealthCheck : IHealthCheck
{public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default){//这是一个三方的获取空闲内存的库var client = new MemoryMetricsClient();var metrics = client.GetMetrics();     Console.WriteLine("Free : " + metrics.Free);//假业务要求,内存大于1000M,就健康var healthCheckResultHealthy = metrics.Free > 1000;if (healthCheckResultHealthy){return Task.FromResult(HealthCheckResult.Healthy("healthy"));}return Task.FromResult(new HealthCheckResult(context.Registration.FailureStatus,"unhealthy"));}
}

‍‍有了这个实现,就可以很方便地实现业务中的各种判定服务是否健康了。

上面的所有健康检查都是拉模式,意思就是外部监控服务会请求本服务的/health,获取信息,来判定是否健康,在asp.net core也提供了推的模式,如下:

using Microsoft.Extensions.Diagnostics.HealthChecks;
using MiniDemo05;var builder = WebApplication.CreateBuilder(args);builder.Services.AddHealthChecks().AddCheck<TestHealthCheck>("test_health_check");
//配置推送的参数
builder.Services.Configure<HealthCheckPublisherOptions>(options =>
{options.Delay = TimeSpan.FromSeconds(1);options.Period = TimeSpan.FromSeconds(5);
});
//注入推送服务
builder.Services.AddSingleton<IHealthCheckPublisher, HealthPublisher>();var app = builder.Build();app.MapGet("/test", () =>
{return DateTime.Now;
});app.Run();public class TestHealthCheck : IHealthCheck
{public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default){var client = new MemoryMetricsClient();var metrics = client.GetMetrics();Console.WriteLine("Total: " + metrics.Total);Console.WriteLine("Used : " + metrics.Used);Console.WriteLine("Free : " + metrics.Free);var healthCheckResultHealthy = metrics.Free > 6000;if (healthCheckResultHealthy){return Task.FromResult(HealthCheckResult.Healthy("healthy"));}return Task.FromResult(new HealthCheckResult(context.Registration.FailureStatus,"unhealthy"));}
}
public class HealthPublisher : IHealthCheckPublisher
{private readonly ILogger<HealthPublisher> _logger;public HealthPublisher(ILogger<HealthPublisher> logger){_logger = logger;}public Task PublishAsync(HealthReport report, CancellationToken cancellationToken){_logger.LogInformation($"{DateTime.Now.ToString()},{ report.Status}");return Task.CompletedTask;}
}

如果监控参数收集是一个url,我们可以在HealthPublisher中把健康的结果推送上去。

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

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

相关文章

npm 安装less插件_node+npm+webpack+less安装

本节主要内容&#xff1a;什么是LESS为什么选择LESS安装webpack编译环境什么是LessLESS是前端css样式预处理器中的一种&#xff0c;和它相同类型的语言还有Sass以及Stylus。它是css语言的扩展&#xff0c;增加了变量、混合、函数、继承等多种语法&#xff0c;让css样式的编写变…

UVa 11346 - Probability

纯粹数学题&#xff0c;推公式吧。注意边界处理精度控制就可以了。 #include <cstdio> #include <cmath> #define EPS 1e-7 int main() {int T; scanf("%d", &T);while (T--){double a, b, S; scanf("%lf %lf %lf", &a, &b, &…

linux之用 grep -r 关键字 快速搜索在目录下面的含有关键字的文件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程 1、快速搜索在目录下面的含有关键字的文件 我们采用下面命令cd directoriesgrep -r 关键字2、搜索结果

python 抓包基于pypcap

2019独角兽企业重金招聘Python工程师标准>>> 1、查询python和python-dev是否安装 dpkg-query -l python dpkg-query -l python-dev #没安装就先安装 sudo apt-get install python python-dev 2、安装flex和bison sudo apt-get install flex bison3、下载libpcap并安…

推荐一个基于Dapr的 Red Dog 的完整微服务应用程序

微服务尽管构建起来非常困难&#xff0c;但它们已成为一种越来越流行的架构模式。随着开发人员开始将他们现有的单体代码库迁移到微服务系统&#xff0c;他们花费大量时间来处理分布式应用程序带来的固有挑战&#xff0c;例如状态管理和服务调用。通过引入Dapr 通过以 http/gRP…

基于事件的 NIO 多线程服务器

2019独角兽企业重金招聘Python工程师标准>>> JDK1.4 的 NIO 有效解决了原有流式 IO 存在的线程开销的问题&#xff0c;在 NIO 中使用多线程&#xff0c;主要目的已不是为了应对每个客户端请求而分配独立的服务线程&#xff0c;而是通过多线程充分使用用多个 CPU 的处…

随机给出三十道四则运算题目

这是课上练习&#xff0c;应用了随机函数&#xff0c;涉及是三个部分第一操作数、运算符、第二操作数&#xff0c;这三个部分都是随机产生的:第一、第二操作数可以应用随机函数产生符合条件的数值&#xff0c;运算符的产生可以在0-3&#xff0c;之间产生随机整数&#xff0c;分…

php反转数字_【PHP】php实现数组反转

php里面有个函数可以反转数组,工作中也经常用到,非常方便。今天来自己实现这样的功能。$arr [2,5,6,1,8,16,12];function reverse($arr){$left 0;$right count($arr) -1;$temp [];while ($left < $right){$temp[$left] $arr[$right];$temp[$right] $arr[$left];$left;…

第6章 C控制语句:循环

学习笔记——《C Prime Plus》 第6章 C控制语句&#xff1a;循环6.1 再探 while 循环6.1.1 程序注释6.1.2 C风格读取循环6.2 while 语句6.2.1 终止 while 循环6.2.2 何时终止循环6.2.3 while&#xff1a;入口循环条件6.2.4 语法要点6.3 _Bool 类型6.4 不确定循环和计数循环6.5 …

Android之用tcpdump常用抓包命令使用总结

1、搞好Android手机抓包环境 1 手机需要root 2 把tcpdump工具 push到手机 /data/local 目录下去,至于怎么搞,读者百度。 2、常见tcpdump抓包命令介绍 -w 把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新…

openresty 前端开发进阶一之http后端

2019独角兽企业重金招聘Python工程师标准>>> 做前端开发&#xff0c;大多数情况下&#xff0c;都需要跟后端打交道&#xff0c;而最常见的方式则是通过http请求&#xff0c;进行通信。 在openresty中&#xff0c;通过http跟后端整合通信的方式又很多种&#xff0c;各…

php集成环境

WampServer转载于:https://www.cnblogs.com/longhs/p/3583495.html

第7章 C控制语句:分支和跳转

学习笔记——《C Prime Plus》 第7章 C控制语句&#xff1a;分支和跳转7.1 if 语句7.2 if else 语句7.2.1 介绍 getchar() 和 putchar()7.4 一个统计单词的程序7.1 if 语句 下程序读取一列数据&#xff0c;每个数据都表示每日的最低温度&#xff08;℃&#xff09;&#xff0c…

Objective-C中的self和super

1.有过面向对象的人知道&#xff0c;self相当于this&#xff0c;super相当于调用父类的方法 2.self是类的隐藏的参数&#xff0c;指向当前调用方法的类&#xff0c;另一个隐藏参数是_cmd&#xff0c;代表当前类方法的selector。 super并不是隐藏的参数&#xff0c;它只是一个”…

ip校验和及udp校验和的计算方法

一、ip校验和的计算: 计算方法: 1. ip包头(共20个字节)按照每16个bit作为一个值依次进行相加 2. 将计算结果的进位加到低16位上 3. 将结果取反 ip包头的内存内容 eg: 45 00 00 20 0F B8 00 00 80 11 00 00 C0 A8 0A 9F C0 A8 0A C7 将 0x4500 0x0020 0x0FB8 0x0000 0x…

【Blog.Core开源】网关统一集成下游服务文档

一般看到公众号更新&#xff0c;就是大概率要开始上班了&#x1f602;上回书咱们说到了《【Blog.Core开源】快速预览Admin界面效果》&#xff0c;这样我们就可以专注于后端开发&#xff0c;而且也能快速的实现效果的预览。那今天我们继续来往下走&#xff0c;说一说网关相关的内…

android4.3 截屏功能的尝试与失败分析

1.背景 上一篇讲了在源码中捕获到了android手机的截屏函数&#xff08;同时按下电源键与音量减&#xff0c;详情http://blog.csdn.net/buptgshengod/article/details/19911909&#xff09;&#xff0c;经过一周的研究还是没有在手机上实现系统截屏功能&#xff0c;总结下尝试的…

numpy方法总结

2019独角兽企业重金招聘Python工程师标准>>> 一、数组方法 创建数组&#xff1a;arange()创建一维数组&#xff1b;array()创建一维或多维数组&#xff0c;其参数是类似于数组的对象&#xff0c;如列表等 反过来转换则可以使用numpy.ndarray.tolist()函数&#xff0…

一些移动端开发的细节记录

好久不来写东西了,最近太忙,给自己搞的很累,对自己选择的道路有些不自信了. 决定干够半年后,大概四月中旬,会离职休息两三个月,去几个喜欢的地方看看,锻炼打球减肥,再把最近想要做过的项目整理一下,编写一些自己的插件和库,把之前积累的一些书过一下. 对前端的热爱没有丝毫改变…

阿里云离线数据仓库

阿里云离线数据仓库第1章 数据仓库概念第2章 项目需求及架构设计2.1 项目需求分析2.2 阿里云技术框架2.2.1 技术选型2.2.2 系统数据流程设计第3章 数据生成模块3.1 埋点数据基本格式3.2 事件日志数据3.2.1 商品列表页&#xff08;loading&#xff09;3.2.2 商品曝光&#xff08…