运维监控健康检查

健康检查

Zeabur 会自动对每个服务执行健康检查,确保部署准备就绪后才接收流量。这实现了零停机部署——如果新部署未通过健康检查,旧版本会继续处理请求。

健康检查的运作方式

当你部署一个服务时,Zeabur 会探测服务的监听端口,验证它是否正在接受连接。只有当健康检查通过后,部署才会被视为就绪。在此之前,先前的部署会维持运作并继续处理流量。

这代表:

  • 健康检查成功 — 流量会路由到新部署,旧部署则会被终止。
  • 健康检查失败 — 新部署会被标记为失败,旧部署继续运作。不会发生停机。
💡

对于挂载了存储空间的服务,Zeabur 会使用 Recreate 部署策略而非滚动更新。这代表旧部署会在新部署启动前先停止,导致部署期间会有短暂的停机时间。这是为了避免两个实例同时访问同一个存储空间而造成数据冲突。

默认行为

默认情况下,Zeabur 会检查你的服务所暴露的端口是否正在接受 TCP 连接。对大多数 Web 应用程序来说,这就足够了——一旦你的 HTTP 服务器开始监听,健康检查就会通过。

默认设置如下:

参数默认值
检查类型TCP 端口探测
间隔时间数秒(系统默认)
超时时间数秒(系统默认)
失败阈值连续多次失败

自定义健康检查路径

如果需要更精确的健康验证,你可以设定自定义的 HTTP 健康检查路径。当你的应用程序在真正准备好处理流量之前需要额外的启动时间(例如预热缓存或建立数据库连接)时,这会特别有用。

设定自定义健康检查路径的步骤:

  1. 在 Zeabur 仪表板中打开你的服务。
  2. 前往 Settings
  3. Health Check 区段中,输入你的自定义路径(例如 /healthz/api/health)。

你的应用程序应在该路径返回 HTTP 2xx 状态码,表示已准备好接收流量。

// 示例:Express.js 健康检查端点
app.get('/healthz', (req, res) => {
  // 在此执行任何就绪检查
  res.status(200).json({ status: 'ok' })
})

疑难排解

部署卡在「Deploying」状态

如果你的部署一直无法通过健康检查,请确认:

  • 你的应用程序是否在正确的端口上监听。Zeabur 会设定 PORT 环境变量——请确保你的应用程序绑定到 0.0.0.0:$PORT
  • 你的应用程序是否能在超时时间内完成启动。如果初始化需要较长时间,请考虑新增一个能立即响应的轻量健康端点。
  • 如果使用自定义健康检查路径,请确保该端点返回 HTTP 2xx 响应。

启动时间较长的服务

某些应用程序(例如 Java 服务或加载大型 ML 模型的应用程序)可能需要额外的初始化时间。在这种情况下,请设定一个自定义健康检查端点,只在应用程序完全就绪后才返回成功响应,而不是依赖默认的 TCP 探测。