ASP.NET Core 健康监控:从入门到实战

B站影视 港台电影 2025-06-25 08:51 1

摘要:在 ASP.NET Core 中,HealthCheck是一种用于监控应用程序运行状况的内置机制。允许你定义和运行检查,以确保你的应用程序及其依赖项(如数据库、缓存、外部服务等)正常运行。HealthCheck 通常用于微服务架构、容器化环境(如 Kubern

在 ASP.NET Core 中,HealthCheck是一种用于监控应用程序运行状况的内置机制。允许你定义和运行检查,以确保你的应用程序及其依赖项(如数据库、缓存、外部服务等)正常运行。HealthCheck 通常用于微服务架构、容器化环境(如 Kubernetes)或需要高可用性的场景。

简介HealthCheck 提供了一种标准化的方式,通过 HTTP 端点(通常是/health)返回应用程序的健康状态。

Healthy:应用程序及其依赖项正常运行。

Degraded:应用程序部分功能受限,但仍在运行。

Unhealthy:应用程序或其依赖项存在问题。

HealthCheck 可以与外部工具(如 Kubernetes、负载均衡器)集成,用于自动检测和处理故障。

基本使用ASP.NET Core 提供了Microsoft.Extensions.Diagnostics.HealthChecks包来实现健康检查。1:安装必要的 NuGet 包dotnet add package Microsoft.Extensions.Diagnostics.HealthChecks

如需要检查特定依赖( SQL Server、Redis),可能需要额外的包

dotnet add package Microsoft.Extensions.Diagnostics.HealthChecks.SqlServer
dotnet add package Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore2:配置 HealthCheck 服务在Program.cs或中,注册健康检查服务:usingMicrosoft.AspNetCore.Diagnostics.HealthChecks;
usingMicrosoft.Extensions.Diagnostics.HealthChecks;

varbuilder = WebApplication.CreateBuilder(args);

// 注册健康检查服务
builder.Services.AddHealthChecks
// 可选:添加特定依赖的健康检查
.AddSqlServer(connectionString: builder.Configuration.GetConnectionString("DefaultConnection"), name: "SqlServer")
.AddRedis(redisConnectionString: builder.Configuration["Redis:ConnectionString"], name: "Redis");

varapp = builder.Build;

// 配置健康检查端点
app.MapHealthChecks("/health");

app.Run;

• AddHealthChecks:注册健康检查服务。

• AddSqlServer、AddRedis:添加特定依赖的健康检查(需安装对应的 NuGet 包)。

• MapHealthChecks("/health"):定义健康检查的 HTTP 端点。

步骤 3:访问健康检查端点运行应用程序后,访问端点(例如Healthy如有检查失败,响应可能是Degraded或默认情况下,/health端点只返回状态文本(如Healthy)。你可以通过app.MapHealthChecks("/health", newHealthCheckOptions
{
ResponseWriter =async(context, report) =>
{
varresult =new
{
Status = report.Status.ToString,
Checks = report.Entries.Select(e =>new
{
Name = e.Key,
Status = e.Value.Status.ToString,
Description = e.Value.Description
})
};
context.Response.ContentType = "application/JSON";
awaitcontext.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(result));
}
});访问/health将返回 JSON 格式的详细报告,例如:{
"Status":"Healthy",
"Checks":[
{
"Name":"SqlServer",
"Status":"Healthy",
"Description":"SQL Server is reachable"
},
{
"Name":"CustomCheck",
"Status":"Healthy",
"Description":"Everything is fine!"
}
]
}健康检查分组你可以为不同的场景定义多个健康检查端点。例如,一个端点用于基本检查(/health/ready),另一个用于详细检查(/health/livebuilder.Services.AddHealthChecks
.AddSqlServer(connectionString: builder.Configuration.GetConnectionString("DefaultConnection"), name: "SqlServer", tags:new { "ready" })
.AddCheck("CustomCheck", tags:new { "live" });

app.MapHealthChecks("/health/ready",newHealthCheckOptions
{
Predicate = check => check.Tags.Contains("ready")
});

app.MapHealthChecks("/health/live",newHealthCheckOptions
{
Predicate = check => check.Tags.Contains("live")
});

• /health/ready:只检查带有ready标签的健康检查。

• /health/live:只检查带有live标签的健康检查。

ASP.NET Core 提供了一个健康检查 UI 包,用于可视化健康检查结果。

dotnet add package AspNetCore.HealthChecks.UI
dotnet add package AspNetCore.HealthChecks.UI.Client
AspNetCore.HealthChecks.UI.SqlServer.Storage
AspNetCore.HealthChecks.UI.InMemory.Storage

配置 UI

builder.Services.AddHealthChecksUI.AddInMemoryStorage;
app.MapHealthChecksUI;访问/healthchecks-ui(默认路径)即可查看健康检查的仪表板。5. 常见健康检查扩展

ASP.NET Core 生态系统提供了许多开箱即用的健康检查扩展,例如:

数据库:SQL Server、MySQL、PostgreSQL、MongoDB、Entity Framework Core。

缓存:Redis、Memcached。

消息队列:RabbitMQ、Kafka。

外部服务:HTTP 端点、FTP、DNS。

安装对应的 NuGet 包并按文档配置即可。例如,检查 HTTP 端点:

builder.Services.AddHealthChecks
.AddUrlGroup(newUri("https://api.dotnetshare.com"), name: "ExternalApi");使用场景

Kubernetes:配置/health/ready用于 Readiness Probe,/health/live用于 Liveness Probe。

负载均衡器:通过健康检查端点检测节点是否可用。

监控系统:将健康检查结果集成到 Prometheus、Grafana 或其他监控工具。

微服务:确保服务及其依赖项(如数据库、API)正常运行。

注意事项

来源:opendotnet

相关推荐