前言

ASP.NET Core提供运行状况检查Middleware和库,以便于报告应用的运行状况。

使用方式也很简单。

引用Nuget包Microsoft.Extensions.Diagnostics.HealthChecks

然后修改Startup.cs文件:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddHealthChecks();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    app.UseHealthChecks("/health");
}

我们甚至可以为第三方组件,比如数据库、缓存,提供健康状态检查。

最后,访问/health来查看应用程序的健康状态:

图片

这种文本方式不够直观,今天我们介绍一个轻量级的图形UI,通过可视化的方式进行健康检查。

Demo

1.引用Nuget包

引用如下Nuget包:

AspNetCore.HealthChecks.UI
AspNetCore.HealthChecks.UI.Client
AspNetCore.HealthChecks.UI.InMemory.Storage

UI支持不同的存储类型,如Sql Server、MySql等,这里选择直接保存到内存。

2.修改Startup.cs

添加UI,并设置了自定义健康检查,用于演示不健康状态:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddHealthChecksUI().AddInMemoryStorage();
    services.AddHealthChecks().AddCheck<DemoHealthCheck>("My IO");
}

public class DemoHealthCheck: IHealthCheck
{
    public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
    {
        if (DateTime.Now.Second > 30)
        {
            return Task.FromResult(HealthCheckResult.Healthy());
        }

        return Task.FromResult(HealthCheckResult.Unhealthy("不健康"));
    }
}

指定健康检查和UI的地址,并且使用UIResponseWriter.WriteHealthCheckUIResponse返回json格式健康检查数据:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapHealthChecks("/health", new HealthCheckOptions()
        {
            Predicate = _ => true,
            ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
        });
        endpoints.MapHealthChecksUI(options => options.UIPath = "/health-ui");
    });
}

3.添加配置项

修改appsettings.json文件:

"HealthChecksUI": {
    "HealthChecks": [
      {
        "Name""My IO",
        "Uri""/health"
      }
    ],
    "Webhooks": [
      {
        "Name""",
        "Uri""",
        "Payload""",
        "RestoredPayload"""
      }
    ],
    "EvaluationTimeinSeconds": 10,
    "MinimumSecondsBetweenFailureNotifications": 60
  }

HealthChecks是个数组,也就是说,UI同时可以监控多个健康检查API。

Webhooks用于当API的健康状态改变时,向指定Uri发送告警数据。

4.使用

运行程序,访问/health-ui即可打开UI:

图片

点击Details按钮,还可查看健康状态历史:

图片


来源:https://mp.weixin.qq.com/s/tIfpPAUt_YwqTlwIW_N4jA
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部