.NET Core 3.1 HealthChecks.UI 无法显示外部服务健康检查结果怎么办?
需求可行性
完全可以通过ASP.NET Core官方健康检查包实现该需求,只需仅注册你自定义的外部服务检查逻辑、不添加系统自带的应用自检测项,就不会监控自身应用的运行状态。
页面无数据原因
HealthChecksUI是独立的展示组件,不会自动读取本地注册的健康检查逻辑,你当前的代码缺少两个必要配置:
- 没有将已注册的健康检查逻辑暴露为可访问的HTTP接口
- 没有为HealthChecksUI配置需要拉取的健康检查接口地址
修复步骤
先确保已安装必要NuGet包:
AspNetCore.HealthChecks.UIAspNetCore.HealthChecks.UI.ClientAspNetCore.HealthChecks.UI.InMemory.Storage
修正
Startup.cs代码:
public class Startup { public void ConfigureServices(IServiceCollection services) { services .AddHealthChecks() // 仅添加自定义的外部服务检查,无需添加其他自检项 .AddCheck<ExternalServiceHealthCheck>("External service health check"); services .AddHealthChecksUI(setup => { // 配置UI要拉取的健康检查端点 setup.HealthChecks.AddHealthCheckEndpoint("外部服务健康状态", "/healthz"); }) .AddInMemoryStorage(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { // 暴露健康检查HTTP接口,返回UI兼容的响应格式 endpoints.MapHealthChecks("/healthz", new HealthCheckOptions { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse }); endpoints.MapHealthChecksUI(setup => { setup.UIPath = "/HealthChecks"; }); }); } }
修改后重启应用,再次访问/HealthChecks路径即可正常展示外部服务的健康检查结果。如果需要监控多个外部服务,仅需新增多个IHealthCheck实现并注册到AddHealthChecks中即可。
内容的提问来源于stack exchange,提问作者Aleks Vujic
相关产品推荐
相关产品推荐

