Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В распределенной системе проверки работоспособности — это периодические оценки состояния, доступности и производительности отдельных узлов или служб. Эти проверки обеспечивают правильную и эффективную работу системных функций. Проверки работоспособности важны для надежности системы, и они обычно выполняются с регулярными интервалами с результатами, проанализированными для принятия решений и исправлений.
Возможны следующие результаты проверки состояния здоровья:
Кроме того, проверки работоспособности часто сообщают о различных диагностических метриках. Дополнительные сведения см. в разделе Метрики диагностики: Microsoft.Extensions.Diagnostics.HealthChecks
Проверка состояния использования ресурсов
Чтобы проверить работоспособность использования ресурсов приложений .NET, добавьте ссылку на пакет в Microsoft.Extensions.Diagnostics.HealthChecks.ResourceUtilization. На экземпляре IServiceCollection выполните цепочку вызовов от AddHealthChecks к AddResourceUtilizationHealthCheck. В следующем примере показано, как использовать метод расширения AddResourceUtilizationHealthCheck для добавления проверки состояния использования ресурсов к экземпляру IServiceCollection.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddHealthChecks()
.AddResourceUtilizationHealthCheck();
var app = builder.Build();
var healthCheckService = app.Services.GetRequiredService<HealthCheckService>();
var result = await healthCheckService.CheckHealthAsync();
Console.WriteLine($"{result.Status} {result.TotalDuration}");
app.Run();
Предыдущий код:
- Создает новый экземпляр HostApplicationBuilder.
- Добавляет проверку состояния использования ресурсов, связывая вызов из AddHealthChecks с методом расширения AddResourceUtilizationHealthCheck.
- Создаёт экземпляр IHost в виде переменной
app. - Возвращает экземпляр HealthCheckService класса из поставщика услуг.
- Выполняет проверку работоспособности и отображает результат.
- Запускает приложение.
Проверки работоспособности приложения в течение его жизненного цикла
Чтобы проверить работоспособность событий жизненного цикла приложения IHostApplicationLifetime, используйте метод расширения AddApplicationLifecycleHealthCheck, доступный в пакете NuGet Microsoft.Extensions.Diagnostics.HealthChecks.Common.
Этот поставщик указывает, что приложение находится в хорошем состоянии только тогда, когда оно полностью активно. До тех пор, пока объект времени существования не указывает, что приложение запущено, поставщик сообщит о том, что приложение не работает. После завершения работы приложения поставщик сообщит о неработоспособной работе приложения.
Библиотека предоставляет HealthCheckService пользователям возможность запрашивать проверку работоспособности в любое время. Рассмотрим следующую реализацию ExampleService.
using System.Runtime.CompilerServices;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
internal class ExampleLifecycle(
HealthCheckService healthCheckService,
ILogger<ExampleLifecycle> logger) : IHostedLifecycleService
{
Task IHostedService.StartAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StartedAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StartingAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedService.StopAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StoppedAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
Task IHostedLifecycleService.StoppingAsync(
CancellationToken cancellationToken) =>
CheckHealthAsync(cancellationToken: cancellationToken);
public Task ReadyAsync() => CheckHealthAsync();
private async Task CheckHealthAsync(
[CallerMemberName] string eventName = "",
CancellationToken cancellationToken = default)
{
HealthReport result =
await healthCheckService.CheckHealthAsync(cancellationToken);
logger.LogInformation(
"{EventName}: {Status}", eventName, result.Status);
}
}
Предыдущий код:
- Определяет новый
ExampleLifecycleкласс, реализующий IHostedService интерфейс. - Определяет основной конструктор, принимаюющий следующие параметры:
- Экземпляр класса HealthCheckService.
- Экземпляр класса ILogger<TCategoryName>.
- Реализует интерфейс IHostedLifecycleService, при этом каждый метод вызывает метод
CheckHealthAsync. - Определяет метод
ReadyAsync, который вызывает методCheckHealthAsync. - Определяет пользовательский метод
CheckHealthAsync, который захватывает имя вызывающего объекта и маркер отмены, а затем запрашивает проверку работоспособности у экземпляраHealthCheckService. Затемresultзаписывается в журнал.
Единственный раз, когда служба проверки работоспособности сообщит о состоянии HealthStatus.Healthy, - это после запуска приложения и до того, как будет вызван процесс остановки. Давайте рассмотрим следующий файл Program.cs:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Hosting;
var builder = Host.CreateApplicationBuilder(args);
var healthChecksBuilder = builder.Services
.AddHostedService<ExampleLifecycle>()
.AddHealthChecks()
.AddApplicationLifecycleHealthCheck();
// You could use the healthChecksBuilder instance to add more checks...
var app = builder.Build();
var services = app.Services.GetRequiredService<IEnumerable<IHostedService>>();
await Task.WhenAll(DelayAndReportAsync(services), app.RunAsync());
static async Task DelayAndReportAsync(IEnumerable<IHostedService> services)
{
// Ensure app started...
await Task.Delay(500);
var service = services.FirstOrDefault(static s => s is ExampleLifecycle);
if (service is ExampleLifecycle example)
{
await example.ReadyAsync();
}
}
Предыдущий код:
- Создает новый HostApplicationBuilder экземпляр, назначенный в качестве переменной
builder. -
ExampleServiceрегистрируется только как IHostedService для приложения. - Добавляет проверку работоспособности для событий IHostApplicationLifetime времени существования приложения путем цепочки вызова из IHealthChecksBuilder экземпляра, возвращаемого AddHealthChecksAddApplicationLifecycleHealthCheck вызовом метода расширения.
- Экземпляр
healthChecksBuilderможно использовать для добавления дополнительных проверок состояния системы.
- Экземпляр
- Создает экземпляр IHost как переменную
app. - Получает
IHostedServiceот поставщика услуг, это экземплярExampleService. - Вызовы с двумя Task.WhenAll ссылками на задачи:
- Метод
DelayAndReportAsync, который задерживает выполнение на 500 миллисекунд, а затем вызывает методReadyAsyncна экземпляреExampleService, оценит проверку работоспособности. - Метод RunAsync(IHost, CancellationToken) запускает
app.
- Метод
Приложение создает логи в следующем порядке, информируя о состоянии проверки работоспособности в связи с событиями жизненного цикла приложения:
-
StartingAsync:Нездоровый -
StartAsync:Нездоровый -
StartedAsync:Нездоровый -
ReadyAsync:Здоровый -
StoppingAsync:Нездоровый -
StopAsync:Нездоровый -
StoppedAsync:Нездоровый
Другими словами, этот поставщик гарантирует, что экземпляр приложения получает трафик только после его готовности. Если вы разрабатываете веб-приложения с помощью ASP.NET Core, доступно промежуточное программное обеспечение для проверки работоспособности. Дополнительную информацию см. в разделе "Проверка работоспособности в ASP.NET Core".