跳到主要内容

IGeekFan.Extensions.Diagnostics.HealthChecks.FreeSql

为 ASP.NET Core Health Checks 提供 FreeSql 探针,快速验证数据库连通性与基础可用性。

功能概览

功能说明
健康探针K8s 就绪/存活探针集成
数据库检查FreeSql 连接状态监控
运维巡检网关或运维平台统一健康检查

安装

dotnet add package IGeekFan.Extensions.Diagnostics.HealthChecks.FreeSql

快速开始

场景:Kubernetes 健康检查

1. 配置数据库

{
"ConnectionStrings": {
"Default": "Server=127.0.0.1;Port=3306;Database=app;Uid=root;Pwd=***;"
}
}

2. 注册健康检查

using FreeSql;
using Microsoft.Extensions.Diagnostics.HealthChecks;

var builder = WebApplication.CreateBuilder(args);

var fsql = new FreeSqlBuilder()
.UseConnectionString(DataType.MySql, builder.Configuration.GetConnectionString("Default"))
.Build();

builder.Services
.AddHealthChecks()
.AddFreeSql(fsql, name: "freesql", failureStatus: HealthStatus.Unhealthy);

var app = builder.Build();

// 健康检查端点
app.MapHealthChecks("/health");
app.MapHealthChecks("/health/ready", new HealthCheckOptions
{
Predicate = check => check.Tags.Contains("ready")
});

app.Run();

场景:多数据库健康检查

var builder = WebApplication.CreateBuilder(args);

// 主数据库
var mainFsql = new FreeSqlBuilder()
.UseConnectionString(DataType.MySql, builder.Configuration.GetConnectionString("MainDb"))
.Build();

// 日志数据库
var logFsql = new FreeSqlBuilder()
.UseConnectionString(DataType.PostgreSQL, builder.Configuration.GetConnectionString("LogDb"))
.Build();

builder.Services
.AddHealthChecks()
.AddFreeSql(mainFsql, name: "main-db", tags: new[] { "db", "ready" })
.AddFreeSql(logFsql, name: "log-db", tags: new[] { "db", "ready" });

var app = builder.Build();

app.MapHealthChecks("/health", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});

app.Run();

高级配置

自定义检查

builder.Services
.AddHealthChecks()
.AddFreeSql(fsql, name: "freesql", failureStatus: HealthStatus.Degraded,
tags: new[] { "database" },
timeout: TimeSpan.FromSeconds(5));

健康检查 UI

builder.Services
.AddHealthChecksUI(options =>
{
options.AddInMemoryStorage();
options.SetEvaluationTimeInSeconds(30);
options.MaximumHistoryEntriesPerEndpoint(50);
})
.AddInMemoryStorage();

app.MapHealthChecksUI(options =>
{
options.UIPath = "/health-ui";
options.ApiPath = "/health-api";
});

运维建议

建议说明
区分探针liveness 和 readiness 分开配置
监控耗时将健康检查耗时纳入监控
安全隔离对外暴露健康端点时结合鉴权或网络隔离
合理超时设置合理的超时时间

故障排查

问题解决方案
检查失败检查数据库连接字符串
超时问题增加超时时间或优化查询
内存问题检查健康检查历史记录配置

相关文档