健康检查
仓库有两类健康检查,职责不同:业务 Host 暴露自己的轻量探针;FreeKit.HealthChecks 是独立的聚合检查与 UI 项目。后者当前不在主 Compose 中,需要单独启动或另行加入部署编排。
入口一览
| 宿主 | 本地监听 | 路由 | 说明 |
|---|---|---|---|
FreeKit.Host | HTTPS 7000 / HTTP 5000 | /health | 主业务 API 自身探针 |
FreeKit.Host + /kit_api PathBase | 同上 | /kit_api/health | 主 Compose 的公开路径 |
FreeKit.HealthChecks | HTTPS 5005 / HTTP 5004 | /health | MySQL、Redis、RabbitMQ 聚合结果 |
FreeKit.HealthChecks | 同上 | /health-mysql | 仅 mysql_check |
FreeKit.HealthChecks | 同上 | /health-redis | 仅 redis_check |
FreeKit.HealthChecks | 同上 | /health-rabbitmq | 仅 rabbitmq 标签 |
FreeKit.HealthChecks | 同上 | /healthchecks-ui | HealthChecks UI 默认页面 |
主 Host 的 Program.cs 只映射 /health,PathBase 由 ASPNETCORE_PATHBASE 前置;聚合 UI 只属于独立 HealthChecks 项目。
启动独立 UI
dotnet run \
--project src/Services/Host/FreeKit.HealthChecks/FreeKit.HealthChecks \
--launch-profile FreeKit.HealthChecks-dev
启动后访问:
- UI:
https://localhost:5005/healthchecks-ui#/healthchecks - 聚合探针:
https://localhost:5005/health - HTTP 调试入口:
http://localhost:5004/health
依赖检查配置
独立项目直接从 ConnectionStrings 注册三种检查。示例中的凭据均为占位符:
{
"ConnectionStrings": {
"MySql": "Data Source=localhost;Port=3306;User ID=<DB_USER>;Password=<DB_PASSWORD>;Initial Catalog=freekit;Charset=utf8mb4;SslMode=none;",
"Redis": "localhost:6379,password=<REDIS_PASSWORD>,defaultDatabase=0",
"RabbitMQ": "amqp://<RABBITMQ_USER>:<RABBITMQ_PASSWORD>@localhost:5672"
},
"HealthChecksUI": {
"HealthChecks": [
{ "Name": "self", "Uri": "/health" },
{ "Name": "mysql", "Uri": "/health-mysql" },
{ "Name": "redis", "Uri": "/health-redis" },
{ "Name": "rabbitmq", "Uri": "/health-rabbitmq" },
{ "Name": "kit-api", "Uri": "https://localhost:7000/kit_api/health" }
],
"EvaluationTimeInSeconds": 10,
"MinimumSecondsBetweenFailureNotifications": 60
}
}
相对 URI 由 HealthChecks UI 请求自身端点。监控其他宿主时应填写该宿主在当前网络命名空间内可访问的地址;容器内不要使用 localhost 指代另一个容器。
当前配置漂移
appsettings.Development.json 仍包含以下历史目标:
https://localhost:7000/health:只有主 Host 未设置 PathBase 时才成立;主 Compose 应使用/kit_api/health。https://localhost:5003/health的health-shorturlapi:不对应当前主 Compose 中的服务。
这些值是待校正配置,不应视为可靠现状。部署前应按实际 Host、PathBase、容器服务名和端口重写 HealthChecksUI:HealthChecks。
与 Compose 的关系
build/compose/freekit_pro_modules/docker-compose.yml 当前包含 MySQL、Redis、RabbitMQ、MeiliSearch、host、job、message,没有 FreeKit.HealthChecks 服务。因此:
- 启动主 Compose 不会自动得到 HealthChecks UI;
- 业务 Host 的
/health仍然存在,可直接交给 Docker、Kubernetes 或外部监控探测; - 若要部署聚合 UI,需要显式添加服务、网络、连接串和访问控制。
:::warning 不要公开无保护的运维面 HealthChecks UI 和详细 JSON 会暴露依赖名称、状态与异常信息。生产环境应放在内网或通过反向代理鉴权,不要直接公开到互联网。 :::
源码定位
src/Services/Host/FreeKit.HealthChecks/FreeKit.HealthChecks/Program.cs:四个/health*路由与 UI 映射src/Services/Host/FreeKit.HealthChecks/FreeKit.HealthChecks/Properties/launchSettings.json:5005 / 5004src/Services/Host/FreeKit.HealthChecks/FreeKit.HealthChecks/appsettings.Development.json:UI 监控目标src/Services/Host/FreeKit.Host/Program.cs:主 Host/healthbuild/compose/freekit_pro_modules/docker-compose.yml:当前主 Compose 服务清单与/kit_apiPathBase