.NET6之MiniAPI(十三):健康检查
生活随笔
收集整理的這篇文章主要介紹了
.NET6之MiniAPI(十三):健康检查
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
程序員開發(fā)程序,是“生”的過程,運(yùn)維人員負(fù)責(zé)日常運(yùn)維,是“養(yǎng)”的過程,在養(yǎng)的過程,運(yùn)維人員希望在第一時(shí)間了解程序的狀況,健康檢查,是最基礎(chǔ)的手段。
var builder = WebApplication.CreateBuilder(args); //注入健康檢查服務(wù) builder.Services.AddHealthChecks(); var?app?=?builder.Build(); app.MapGet("/test", () => {????return?DateTime.Now; }); //添加中間件,設(shè)置健康檢查的訪問路徑是/health app.MapHealthChecks("/health"); app.Run();還可以通過重寫來改變返回的字符串:
當(dāng)然,這樣的健康檢查只是host有沒有啟動(dòng),如果有更深層次的檢查,可以通過實(shí)現(xiàn)IHealthCheck來實(shí)現(xiàn)。
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; }); //添加中間件,設(shè)置健康檢查的訪問路徑是/health app.MapHealthChecks("/health"); app.Run();public class TestHealthCheck : IHealthCheck {public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default){//這是一個(gè)三方的獲取空閑內(nèi)存的庫(kù)var client = new MemoryMetricsClient();var?metrics?=?client.GetMetrics();?????Console.WriteLine("Free : " + metrics.Free);//假業(yè)務(wù)要求,內(nèi)存大于1000M,就健康var healthCheckResultHealthy = metrics.Free > 1000;if (healthCheckResultHealthy){return Task.FromResult(HealthCheckResult.Healthy("healthy"));}return Task.FromResult(new HealthCheckResult(context.Registration.FailureStatus,"unhealthy"));} }??有了這個(gè)實(shí)現(xiàn),就可以很方便地實(shí)現(xiàn)業(yè)務(wù)中的各種判定服務(wù)是否健康了。
上面的所有健康檢查都是拉模式,意思就是外部監(jiān)控服務(wù)會(huì)請(qǐng)求本服務(wù)的/health,獲取信息,來判定是否健康,在asp.net core也提供了推的模式,如下:
如果監(jiān)控參數(shù)收集是一個(gè)url,我們可以在HealthPublisher中把健康的結(jié)果推送上去。
總結(jié)
以上是生活随笔為你收集整理的.NET6之MiniAPI(十三):健康检查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# 值类型的局限性
- 下一篇: 【Blog.Core开源】网关统一集成下