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

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

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

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中把健康的结果推送上去。

.NET6之MiniAPI(十三):健康检查相关推荐

  1. .NET6之MiniAPI(三十):结束篇(附链接)

    不知不觉来到了<.NET6之MiniAPI>的第三十篇,回顾之前的篇幅,主要涉及如下: HTTP请求,应答 Request 桂素伟,公众号:桂迹.NET6之MiniAPI(二):reque ...

  2. 体检系统前端源码_给您的前端进行健康检查

    体检系统前端源码 by Ewa Mitulska-Wójcik 伊娃·米图尔斯卡(EwaMitulska-Wójcik) 给您的前端进行健康检查 (Give your Front End a Heal ...

  3. 负载均衡中的服务器健康检查

    为了确保应用的高可用性,在做服务器负载均衡时,负载均衡器对服务器做健康检查是必须的.健康检查可以应用到服务器.服务器端口.服务组(Service-group)3个层面,之间是否有关联?应当如何应用?下 ...

  4. 聊聊Spring Boot服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控等!...

    来自:https://juejin.im/post/5e2179def265da3e152d2561 前言 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上.这不,最近我就被分配了要 ...

  5. Spring Boot 服务监控,健康检查,线程信息,JVM堆信息,指标收集,运行情况监控...

    作者:Richard_Yi 来源:http://39sd.cn/B2A0B 去年我们项目做了微服务1.0的架构转型,但是服务监控这块却没有跟上.这不,最近我就被分配了要将我们核心的微服务应用全部监控起 ...

  6. slb健康检查方式_SLB健康检查也是“正常”-问答-阿里云开发者社区-阿里云

    负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性.健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响. 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负 ...

  7. 运维企业专题(8)LVS高可用与负载均衡后篇——LVS健康检查与高可用详解

    实验准备 1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源 2.准备三台虚拟机,为了区分主机名与IP分别为 server1 172.25.6.1 ser ...

  8. linux网络健康度检测,linux运维、架构之路-K8s健康检查Health Check

    一.Health Check介绍 强大的自愈能力是k8s容器编排引擎一个重要特性,自愈能力的默认实现方式为自动重启发生故障的容器,另外还可以利用Liveness和Readiness探测机制设置更精细的 ...

  9. apache关于记录真实客户端ip和不记录健康检查日志

    由于负载均衡会转发客户端的请求到web服务器,所以web服务往往记录的是负载均衡的IP,现在可以通过下面的配置,让apache记录真实客户端IP 语法 #LogFormat  "\" ...

最新文章

  1. 技术05期:五分钟教你读懂卷积神经网络【CNN】
  2. ICCV 2021 | 英伟达新研究:直接通过视频就能捕获3D人体动作!
  3. centos7安装tomcat_手把手教你,使用 Nginx 搭配 Tomcat 实现负载均衡!
  4. 五年级计算机学情分析,2015—2016学年小学五年级信息技术上册教学计划
  5. 利用条件GANs的pix2pix进化版:高分辨率图像合成和语义操作 | PaperDaily #23
  6. Left join后用and和where的区别
  7. python程序调试logging_python-logging模块的简单使用
  8. JTA的含义及应用简介
  9. 【转】10.Qt编程涉及的术语和名词
  10. php获取元素位置,jquery如何获取当前元素的位置
  11. 用php做盒子模型,什么是CSS盒子模型?一文带你了解CSS盒子模型
  12. MaterialPropertyBlock的使用
  13. 用python写的,一个中英文转摩斯电码小程序
  14. 森林怎么训练野人_森林游戏怎么让野人跪下 | 手游网游页游攻略大全
  15. linux终端反引号怎么使用,Linux 反引号 的作用
  16. NR/5G - 系统消息变更
  17. 无法加载文件 ******.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 get-help about_signing
  18. 何海涛算法面试题感悟之四:二元树…
  19. sin72度用计算机怎么算,三角函数值
  20. java 读取项目内图片,java web项目中读取本地图片

热门文章

  1. IOS_SearchBar搜索栏及关键字高亮
  2. [javaEE] JDBC快速入门
  3. Building a Space Station--POJ 2031
  4. input file的默认value清空与赋值方法
  5. Django 使用 mysql 数据库连接
  6. 在FC中如何获取fcdot文件
  7. 只需要2个工具,百度云盘大文件就能用迅雷和IDM下载
  8. animate 实现滑动切换效果
  9. WinHEC(Windows硬件project产业创新峰会)将2015回归
  10. OpenJudge计算概论-最长单词2