ASP.NET CORE 健康检查

首先创建一个空的web api项目

ASP.NET CORE 健康检查_第1张图片

添加引用
https://www.nuget.org/packages/Microsoft.AspNetCore.Diagnostics.HealthChecks
ASP.NET CORE 健康检查_第2张图片

Startup文件中添加相应代码

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddHealthChecks();//添加服务
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
            app.UseHealthChecks("/health");//配置访问URL
        }

官方支持如下多种检查
Sql Server
MySql
Oracle
Sqlite
RavenDB
Postgres
EventStore
RabbitMQ
Elasticsearch
Redis
System: Disk Storage, Private Memory, Virtual Memory
Azure Service Bus: EventHub, Queue and Topics
Azure Storage: Blob, Queue and Table
Azure Key Vault
Azure DocumentDb
Amazon DynamoDb
Amazon S3
Network: Ftp, SFtp, Dns, Tcp port, Smtp, Imap
MongoDB
Kafka
Identity Server
Uri: single uri and uri groups
Consul
Hangfire
SignalR

首先我们添加mysql检查
https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks
官方文档说明 使用了myget来管理HealthChecks相关的包,所以我们首先要添加源到NUGET管理里来
We use MyGet feed for preview versions of HealthChecks pacakges.

VS-工具-选项

ASP.NET CORE 健康检查_第3张图片

添加以后点击更新 确定就可以进行安装了


ASP.NET CORE 健康检查_第4张图片

在当前管理界面右上角选择自己添加的源进行搜索

我们选择第三个进行安装

进行数据库连接的配置

首先运行mysql服务


ASP.NET CORE 健康检查_第5张图片
image.png

连接正常 配置相关数据库连接和代码设置


ASP.NET CORE 健康检查_第6张图片
ASP.NET CORE 健康检查_第7张图片
 services
.AddHealthChecks()
.AddMySql(Configuration["ConnectionStrings:DefaultConnection"];

运行访问


ASP.NET CORE 健康检查_第8张图片

如果健康则显示Healthy不健康为Unhealthy


ASP.NET CORE 健康检查_第9张图片
ASP.NET CORE 健康检查_第10张图片

不过这样并不是很明显,因此还需要添加一款更直观的UI进行展示。
搜索刚才添加的源进行安装


ASP.NET CORE 健康检查_第11张图片

添加配置代码

services.AddHealthChecksUI();

app.UseHealthChecksUI();

This automatically registers a new interface on /healthchecks-ui where the spa will be served.
已经自动注册了地址了

源码相关默认配置

namespace HealthChecks.UI.Configuration
{
    public class Options
    {
        public string UIPath { get; set; } = "/healthchecks-ui";
        public string ApiPath { get; set; } = "/healthchecks-api";
        public bool UseRelativeApiPath = true;
        public string WebhookPath { get; set; } = "/healthchecks-webhooks";
        public bool UseRelativeWebhookPath = true;
        public string ResourcesPath { get; set; } = "/ui/resources";
        public bool UseRelativeResourcesPath = true;
    }
}

这样配置好以后其实UI里还是不能显示东西的,还需要添加HealthReport数据进来 如下配置
When we target applications to be tested and shown on the UI interface, those endpoints have to register the UIResponseWriter that is present on the AspNetCore.HealthChecks.UI.Client as their ResponseWriter in the HealthChecksOptions when configuring UseHealthChecks method.

安装配置相关的包

ASP.NET CORE 健康检查_第12张图片

配置代码(WriteHealthCheckUIResponse is defined on HealthChecks.UI.Client nuget package.)

            app.UseHealthChecks("/health",new HealthCheckOptions() {
                Predicate=_=>true,
                ResponseWriter= UIResponseWriter.WriteHealthCheckUIResponse
            });

下来还需要添加一些JSON配置到appsettings.json,这玩意也是麻烦的很!.NET CORE的整体环境还是有待改进。

{
  "HealthChecks-UI": {
    "HealthChecks": [
      {
        "Name": "HealthChecks",
        "Uri": "http://localhost:5000/health"
      }
    ],
    "Webhooks": [
      {
        "Name": "",
        "Uri": "",
        "Payload": "",
        "RestoredPayload":""
      }
    ],
    "EvaluationTimeOnSeconds": 10,
    "MinimumSecondsBetweenFailureNotifications":60,
    "HealthCheckDatabaseConnectionString": "Data Source=[PUT-MY-PATH-HERE]\\healthchecksdb"
  }
}

运行查看效果


ASP.NET CORE 健康检查_第13张图片

你可能感兴趣的:(ASP.NET CORE 健康检查)