健康检查中间件
健康检查中间件用于实时监控应用及其依赖(如数据库、缓存、外部服务等)的运行状态,便于自动化运维和故障告警。
健康检查中间件典型时序图
健康检查中间件处理流程
健康检查中间件负责拦截所有指向 /health 的请求,并将其交由健康检查逻辑处理。
中间件会遍历并执行所有已注册的健康检查项(Checker),每个检查项可以是对数据库、缓存、外部服务等的健康状态检测。检查项处理器(Checker)会依次执行所有健康检查逻辑,并收集每一项的健康状态(如 healthy/unhealthy)。
所有健康检查项都返回健康(Healthy),中间件会向客户端返回 HTTP 200 OK,表示服务健康。有任意一项返回不健康(Unhealthy),中间件会向客户端返回 HTTP 500 Unhealthy,表示服务存在异常。
快速启动
只需 3 步即可集成健康检查服务:
cangjie
import spire_web_hosting.*
import spire_web_http.*
import spire_web_healthchecks.*
import spire_extensions_healthchecks.*
main() {
// 1. 构建Web主机
let builder = WebHost.createBuilder()
// 2. 注册健康检查服务
builder.services.addHealthChecks()
.addCheck("health"){
println("health check")
return HealthCheckResult.healthy()
}
let host = builder.build()
// 3. 启用健康检查中间件
host.useHealthChecks("/health")
host.run()
}
添加依赖
需要在依赖配置文件(cjpm.toml)中添加如下依赖:
bash
[dependencies]
spire_web_http = { path = "../spire_web_http"}
spire_web_hosting = { path = "../spire_web_hosting"}
spire_web_healthchecks = { path = "../spire_web_healthchecks"}
spire_extensions_injection = { path = "../spire_extensions_injection"}
spire_extensions_healthchecks = {path = "../spire_extensions_healthchecks"}
自定义健康检查
可注册自定义健康检查项(checker):
cangjie
main() {
let builder = WebHost.createBuilder()
// 注册健康检查服务,并添加自定义检查项
builder.services.addHealthChecks()
// 添加自检项
.addCheck("self"){
return HealthCheckResult.healthy()
}
// 添加数据库连接检查项
.addCheck("MySql") {
let dbConnected = checkDatabaseConnection()
if (dbConnected) {
return HealthCheckResult.healthy()
} else {
return HealthCheckResult.unhealthy(description: "数据库连接失败", exception: None)
}
}
let host = builder.build()
// 配置健康检查中间件,监听/health端点
host.useHealthChecks("/health")
host.run()
return 0
}
// 假设的数据库连接检测函数,实际应替换为真实逻辑
public func checkDatabaseConnection(): Bool {
// 这里可以写实际的数据库ping逻辑
return true // 示例:始终返回连接正常
}
最佳实践
- 健康检查端点建议仅暴露给内部或受控网络
- 可结合监控系统(如 K8s、Prometheus)实现定时探针,自动探活
- 合理拆分健康检查项,便于定位问题
- 可自定义健康检查路径(如/healthz、/ready 等)
- 响应内容可包含各项检查的详细状态,便于排查