ASP.NET Core предлагает ПО промежуточного слоя для проверки работоспособности и библиотеки для создания отчетов о работоспособности компонентов инфраструктуры приложений.

Проверки работоспособности могут облегчить вашу жизнь, показывая, что у вас нет доступа к приложению или хосту вашего приложения. Таким образом, вы можете проверить доступность приложения.

Вы можете сообщать о работоспособности любого приложения ASP.net от MVC, внешнего приложения до внутреннего приложения.

Это два типа проверки здоровья

  • живучестьпроверка работоспособности простой тип проверки работоспособности сообщает только о том, запущено ли ваше приложение
  • проверки готовности работоспособности, обычно выполняется более обширный и трудоемкий набор проверок, чтобы определить, доступны ли все подсистемы и ресурсы приложения.

Как увидеть работоспособность каждой службы?

Вам необходимо создать конечную точку HTTP и зарегистрировать эту конечную точку в файле startup.cs. Ответ этой конечной точки HTTP даст вам статус проверки работоспособности. Код состояния HTTP сопоставляется с кодом проверки работоспособности.

Код состояния HTTP и код проверки работоспособности

Здоровый-› 200 ОК

Ухудшение качества-› 200 OK

Неисправность-› 503 Служба недоступна

Но вы можете изменить код состояния, если хотите. Ниже у вас есть пример.

Проверки здоровья

Пример

Перейдите к файлу Startup.cs и введите

public void ConfigureServices(IServiceCollection services)
{
    services.AddHealthChecks();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
      endpoints.MapControllerRoute(
      name: "default",
      pattern: "{controller=Home}/{action=Index}/{id?}");
 endpoints.MapHealthChecks("/health");
});
}

Всего двумя строками кода вы реализовали Liveness. Вам просто нужно зарегистрироваться в сервисах и указать конечную точку для HTTP-запроса. В этом случае будет www.localhost:44382/health. Возможно, вам нужно изменить порт.

Проверка работоспособности в базе данных

Чтобы проверить, работает ли база данных, вам просто нужно открыть соединение, и если вы можете открыть соединение, вы можете сказать, что база данных работает.

Пример

using Microsoft.Extensions.Diagnostics.HealthChecks;
public void ConfigureServices(IServiceCollection services)
{
   //more code 
    services.AddHealthChecks()
.AddCheck("Database SQL check", sql=>
    {
      using (var connection = new SqlConnection(connectionString))
      {
        try
        {
          connection.Open();
          return HealthCheckResult.Healthy();
        }
        catch (SqlException)
        {
          return HealthCheckResult.Unhealthy();
        }
      }
    });
//more code

Чтобы проверить соединение, вам просто нужно AddCheck, вставить строку, а затем вставить попытку и поймать для проверки соединения. Вы должны добавить журнал для SqlException. Каждый раз, когда вам нужно что-то проверить, вы можете просто добавить AddCheck.

Имейте в виду, что если ваше приложение работает так, что оно исправно, но база данных закрыта, результат будет неработоспособным. Чтобы быть работоспособным, каждая служба должна быть работоспособной в этой проверке работоспособности. Но если кто-то нездоров, в результате вы будете нездоровы.
Вы также можете использовать третьи стороны для проверки работоспособности, например,

Install-Package AspNetCore.HealthChecks.SqlServer

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddHealthChecks().AddSqlServer(connectionString);
    //more code

Чтобы увидеть все сторонние программы, которые вы можете установить, выполните поиск в GitHub, например, https://github.com/xabaril/AspNetCore.Diagnostics.HealthChecks. база данных.

Проверка работоспособности в API

Это простой запрос на получение, вы можете создать свой собственный или установить пакет NuGet. Убедитесь, что ответ от этого get не извлекает чрезмерное количество данных, потому что вы не хотите ставить под угрозу свое приложение тщательными проверками работоспособности.

Использование пакета NuGet.

Install-Package AspNetCore.HealthChecks.Uris

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
     services.AddHealthChecks()
     .AddUrlGroup(new Uri("www.apiLinkUrl.com"), "Name for this health check", HealthStatus.Unhealthy, timeout: new TimeSpan(0,0,10));
    //more code

Вам нужно сказать URL, дать имя для этой проверки работоспособности. HealthStatus — это то, что вы ожидаете, если проверка работоспособности не удалась, а время ожидания — это то, сколько времени вы хотите ждать ответа.

Настройка кода состояния HTTP

Как мы видели, код состояния сопоставляется с результатом проверки работоспособности, но вы можете изменить код состояния на что-то, что вам нравится или имеет больше смысла в вашем приложении. Для этого нам просто нужно изменить ResultStatusCodes.

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddHealthChecks();
   //more code
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   app.UseEndpoints(endpoints =>
   {
     endpoints.MapHealthChecks("/health", new HealthCheckOptions() {
     ResultStatusCodes =
      {
       [HealthStatus.Healthy]= StatusCodes.Status200OK,
   [HealthStatus.Degraded]=StatusCodes.Status500InternalServerError,
   [HealthStatus.Unhealthy]=StatusCodes.Status503ServiceUnavailable
     }
});
});
    //more code 

Вы также можете изменить HTTP-ответ, для этого вам просто нужно назначить новый метод, подобный этому.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   app.UseEndpoints(endpoints =>
   {
    endpoints.MapHealthChecks("/health", new HealthCheckOptions() {
    ResultStatusCodes =
     {
      [HealthStatus.Healthy]= StatusCodes.Status200OK,
   [HealthStatus.Degraded]=StatusCodes.Status500InternalServerError,
   [HealthStatus.Unhealthy]=StatusCodes.Status503ServiceUnavailable
     },
       ResponseWriter=HealthChecksResponse
      });
    });
}
private Task HealthChecksResponse(HttpContext context, HealthReport result)
{
     context.Response.ContentType = "application/json";
     var json = new JObject(
      new JProperty("OverrallStatus:", result.Status.ToString()),
      new JProperty("TotalTimeDuration", result.TotalDuration.TotalSeconds.ToString("0:00.00"))
);
    return context.Response.WriteAsync(json.ToString(Newtonsoft.Json.Formatting.Indented));
}

Таким образом, я скажу, что ответ будет json. И вам также нужно создать объект json. Для этой работы вам необходимо установить один пакет NuGet.

Install-Package Newtonsoft.Json -Version 12.0.3

Добавление пользовательского интерфейса проверки работоспособности

Чтобы добавить пользовательский интерфейс к проверкам работоспособности, вы можете установить этот пакет. И вам просто нужно немного конфигурации.

Install-Package AspNetCore.HealthChecks.UI -Version 3.0.9

Прежде всего, зарегистрируйте службы для пользовательского интерфейса проверки работоспособности.

Startup.cs

public void ConfigureServices(IServiceCollection services)
{ 
    //all the health checks services.

      services.AddHealthChecksUI();
    // more code
}

Затем создайте конечную точку для вашего пользовательского интерфейса. Нравится,

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
 app.UseEndpoints(endpoints =>
 {
   endpoints.MapHealthChecks("/healthui", new HealthCheckOptions()
    { 
       Predicate = _ => true,
       ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
     });
 });
  app.UseHealthChecksUI();
}

Appsetting.json

"HealthChecksUI": {
  "HealthChecks": [
    {
       "Name": "HTTP-Api-Basic",
       "Uri": "https://localhost:44382/healthui"
    }
  ],
  "EvaluationTimeInSeconds": 10,
  "MinimumSecondsBetweenFailureNotifications": 60
}

Эта конфигурация предназначена для того, чтобы пользовательский интерфейс знал, куда обращаться, чтобы узнать, исправна ли служба или нет. EvaluationTimeInSeconds — это обновление, которое вам нужно. Если у вас больше услуг и вы хотите проверять работоспособность, вы должны добавить их в раздел HealthChecks.

Запустите ваше приложение и перейдите по адресу https://localhost:44382/healthchecks-ui#/healthchecks. Возможно, вам нужно изменить порт.