Skip to content

Health 健康检查模块

存活和就绪探针,支持 SSRF 防护。

包含内容

  • 存活探针(服务是否存活?)
  • 就绪探针(服务是否准备好接受流量?)
  • 自定义健康检查
  • SSRF 防护(私有 IP 拒绝)

快速复制

bash
cp -r registry/health/src/go/* yourproject/internal/health/

使用方式

基本设置

go
checker := health.NewChecker()

// 添加就绪检查
checker.AddCheck("database", func(ctx context.Context) error {
    return db.PingContext(ctx)
})

checker.AddCheck("redis", func(ctx context.Context) error {
    return redis.Ping(ctx).Err()
})

// 注册 handler
http.Handle("/healthz", checker.LivenessHandler())
http.Handle("/readyz", checker.ReadinessHandler())

自定义检查

go
checker.AddCheck("external-api", func(ctx context.Context) error {
    resp, err := http.Get("https://api.example.com/health")
    if err != nil {
        return err
    }
    if resp.StatusCode != 200 {
        return fmt.Errorf("status: %d", resp.StatusCode)
    }
    return nil
})

端点

端点用途响应
/healthz存活探针存活时返回 200 OK
/readyz就绪探针所有检查通过时返回 200 OK

配置

go
checker := health.NewChecker(health.Config{
    Timeout: 5 * time.Second,
})

文件参考

文件用途
checker.go健康检查管理器
handler.goHTTP handler
checks.go内置检查

安全特性

  • SSRF 防护(HTTP 检查中拒绝私有 IP)
  • CRLF 注入防护
  • 所有检查超时

测试

bash
cd registry/health/src/go
go test -v ./...

Released under the MIT License.