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 分开配置 |
| 监控耗时 | 将健康检查耗时纳入监控 |
| 安全隔离 | 对外暴露健康端点时结合鉴权或网络隔离 |
| 合理超时 | 设置合理的超时时间 |
故障排查
| 问题 | 解决方案 |
|---|---|
| 检查失败 | 检查数据库连接字符串 |
| 超时问题 | 增加超时时间或优化查询 |
| 内存问题 | 检查健康检查历史记录配置 |
相关文档
- DataProtection.FreeSql - 密钥存储
- Core - 基础包
- 包能力矩阵