3

我将 .NET Core Health Checks 添加到我的应用程序中。

如果它是基本检查或所有检查,我想使用标签只运行一次检查以进行更详细的检查。

这就是我所拥有的:

services.AddHealthChecks()
                        .AddCheck("Check1", () => HealthCheckResult.Healthy("Service Is Healthy!"), tags: new[] { "basic", "full" })
                        .AddCheck<CheckLogsAreHealthy>("Check2", tags: new[] { "full" })
                        .AddCheck<CheckLvcConnectionStatus>("Check3", tags: new[] { "full" })

我认为我的 URL 应该是这样的:

http://localhost:4000/api/health?tags=basic

或者

http://localhost:4000/api/health?tags=full

但情况似乎并非如此。如何运行每项检查?

4

1 回答 1

3

这可能是一个迟到的答案,我希望您已经找到了您的解决方案,但调用AddHealthChecks不会自动为您的健康检查创建 URL,它只是注册它们。

要为您的健康检查创建端点,您必须调用MapHealthCheckson 方法IEndpointRouteBuilder。此方法还接受带有Predicate字段的选项,您可以在其中传递谓词以过滤要执行的运行状况检查。例如,以下示例根据标签过滤已注册的健康检查,并创建一个/health/basic和一个/health/full端点,每个端点都执行具有basicfull在其标签中的健康检查。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
   app.UseEndpoints(endpoints =>
   {      
      endpoints.MapHealthChecks("/health/basic", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
      {
         Predicate = registration => registration.Tags.Contains("basic")
      });
      
      endpoints.MapHealthChecks("/health/full", new Microsoft.AspNetCore.Diagnostics.HealthChecks.HealthCheckOptions
      {
         Predicate = registration => registration.Tags.Contains("full")
      });
   });
...
}
于 2020-11-24T14:17:13.090 回答