我正在使用 .NET Core 3.1 来开发 Web 应用程序。它依赖于其他几个外部服务(用 Node.js 编写的 API)。我想监控外部服务的运行状况并使用 HealthChecks.UI
在单独的页面上显示运行状况。我对自己的应用程序的健康状况不感兴趣,我对依赖的外部系统的健康状况感兴趣。这可以通过health checks package实现吗?
这是我目前拥有的代码:
Startup.cs
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddHealthChecks()
.AddCheck<ExternalServiceHealthCheck>("External service health check");
services
.AddHealthChecksUI()
.AddInMemoryStorage();
}
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecksUI(setup =>
{
setup.UIPath = "/HealthChecks";
});
});
}
}
ExternalServiceHealthCheck.cs
public class ExternalServiceHealthCheck : IHealthCheck
{
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
return Task.FromResult(HealthCheckResult.Healthy("External service is healthy"));
}
}
当我转到 /HealthChecks
时,即使我注册了 ExternalServiceHealthCheck
(见图),我也会得到一个空的 UI。为什么它没有显示在 /HealthChecks
页面上?
答案 0 :(得分:0)
看起来用户界面看不到健康检查。默认情况下,除非您另行配置,否则 UI 会查找 /healthchecks-api
以获取要呈现的运行状况检查的数据。
此外 /healthchecks-api
需要安装 AspNetCore.HealthChecks.UI.Client
包并将该包 UIResponseWriter
设置为选项的 ResponseWriter 属性:
app.MapHealthChecks("/healthchecks-api", new HealthCheckOptions
{
Predicate = _ => true,
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});
您应该能够查看 /healthchecks-api
并看到一些 JSON 返回,而不是基本的“健康”/“不健康”消息。这一切都来自 HealthChecks UI 包的 readme。
答案 1 :(得分:0)
当我在配置文件中添加时,我在本地完全重现了您的问题
"HealthChecks-UI": {
"HealthChecks": [
{
"Name": "Ordering HTTP Check",
"Uri": "http://localhost:5102/hc"
},
{
"Name": "Ordering HTTP Background Check",
"Uri": "http://localhost:5111/hc"
}
]
}
它可以正确显示。
如果要使用healthchecks-ui
,必须通过appsettings.json
或者在Startup
中配置Endpoint,否则无法在UI上显示。在您的情况下,只要 API Endpoint 返回 http 状态代码 200,就是健康状态。所以你应该在其他项目中提供专门用于健康检查的API。如果一切正常,他们只需要返回http状态码200即可。