Health Checks

AspNet Zero has an implementation of health checks and health checks UI.

You can enable or disable health checks and health checks UI.

Settings

Health checks settings are located in the appsettings.json file

"HealthChecks": {
    "HealthChecksEnabled": true, //enable/disable all health checks.
    "HealthChecksUI": {
      "HealthChecksUIEnabled": true, //enable/disable health checks ui
      "HealthChecks": [
        {
          "Name": "MyCompanyName.AbpZeroTemplate.Web.MVC", //your app name
          "Uri": "http://localhost:62114/healthz" /* your_project_url/healthz
			you should change that url before you publish your project*/
        }
      ],
      "EvaluationTimeOnSeconds": 10,
      "MinimumSecondsBetweenFailureNotifications": 60,
      //"HealthCheckDatabaseConnectionString": "Data Source=[PUT-MY-PATH-HERE]\\healthchecksdb" //-> Optional, default on WebContentRoot,
      //for example, if you use azure you may need to set this connection string
    }
  }

Note: If you enable Health Checks UI, don't forget to change your healthz URL before you publish your website.

Adding new health check

There are a lot of libraries which you can add to your health check easily. To see a full list of libraries and used package in AspNet Zero, see https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks. Here are some sample package names:

AspNetCore.HealthChecks.System
AspNetCore.HealthChecks.Network
AspNetCore.HealthChecks.SqlServer
...
Adding your custom health check

To add your own health check, you should create a class inherited from IHealthCheck. ( Already implemented health check classes are located under HealthChecks folder of .Application project.)

  public class MyCustomHealthCheck : IHealthCheck
    {
        private readonly MyService _myService;
        public AbpZeroTemplateDbContextHealthCheck(MyService myService)
        {
            _myService = myService;
        }

        public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = new CancellationToken())
        {
            if (_myService.CheckSomeThing())
            {
                return Task.FromResult(HealthCheckResult.Healthy("MyService is healthy."));
            }

            return Task.FromResult(HealthCheckResult.Unhealthy("MyService is unhealthy."));
        }
    }

In both cases, you should add your health checks to HealthCheckBuilder. HealthCheckBuilder is located in .Web.Core project. ( .Web.Core -> HealthCheck -> AbpZeroHealthCheck.cs -> AddAbpZeroHealthCheck ) .

public static class AbpZeroHealthCheck
    {
        public static IHealthChecksBuilder AddAbpZeroHealthCheck(this IServiceCollection services)
        {
            var builder = services.AddHealthChecks();
            builder.AddCheck<AbpZeroTemplateDbContextHealthCheck>("Database Connection");
            builder.AddCheck<AbpZeroTemplateDbContextUsersHealthCheck>("Database Connection with user check");
            builder.AddCheck<CacheHealthCheck>("Cache");

            // add your other health checks here
            // builder.AddCheck<MyCustomHealthCheck>("my health check");
            //...
            return builder;
        }
    }

After adding your new health check here, you will be able to see its status in JSON and UI automatically.


Endpoints:

  • MVC project (Only exists in ASP.NET Core & jQuery version)

    Health checks UI endpoint: http://localhost:62114/healthchecks-ui (if it is enabled)

    Health checks JSON result endpoint: http://localhost:62114/healthz (if it is enabled)

  • Host project (Available in ASP.NET Core versions but designed for Angular project)

    Health checks UI endpoint: http://localhost:22742/healthchecks-ui (if it is enabled)

    Health checks JSON result endpoint: http://localhost:22742/healthz (if it is enabled)

  • Public Website

    Health checks UI endpoint: http://localhost:45776/healthchecks-ui (if it is enabled)

    Health checks JSON result endpoint: http://localhost:45776/healthz (if it is enabled)

see also:
https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks

https://docs.docker.com/engine/reference/builder/#healthcheck

Note: If you enable health checks, it will create its dbContext. That's why, when you try to create new migration or update database you should also use -c [YourProjectName]DbContext command.

In this document