如何在 Python 中实现健康检查?

2025 年 3 月 7 日 | 阅读 4 分钟

引言

需要注意的是,在微服务和现代 Web 应用的时代,您的服务必须保持运行。实现健康检查是其中一种方法。通过健康检查,可以检查应用程序及其任何出错并需要干预的子组件的状况。

在本文中,我将向您展示如何在 Python 中创建健康检查,并在此过程中使用 Flask Web 框架。

为什么健康检查很重要?

试想一下,如果您运营一个电子商务网站,某天数据库停止工作,或者外部支付网关出现故障。如果问题未得到修复,并且没有适当的监控系统,这些问题将 unnoticed,因此,糟糕的用户体验是不可避免的。监控会生成有关系统运行状况的详细信息,并有助于组织轻松检测和处理问题。

健康检查的逐步实现

设置 Flask 应用程序

为此,您应该首先设置一个 Flask 应用程序,该应用程序将响应一个特殊的健康检查端点。Flask 是一个微型 Web 框架,非常适合构建小型到大型应用程序以运行 HTTP 服务。

添加服务检查

下一步是为应用程序依赖的关键服务实施检查,例如数据库连接性、磁盘空间可用性和外部 API。我们将模拟这些检查并将它们的状态返回到响应中。

合并结果

最后,将所有服务检查的结果合并到单个响应中,并通过 `/health` 端点提供服务。

基本方法:使用 Flask 的 HTTP 健康检查端点

您可以使用 Flask Web 框架创建一个 HTTP 健康检查 端点,该端点响应您系统中各种服务的状态。

Code Example

输出

 
{
    "hostname": " DESKTOP-4HAIJB7",
    "database": {
        "database": "up"
    },
    "external_service": {
        "external_service": "up"
    },
    "disk_space": {
        "disk_space": "sufficient"
    }
}   

如果其中一个服务出现问题,状态将反映这一点

说明

  • Flask 设置:创建一个基本的 Flask 应用程序,其中包含一个 `/health` 路由,该路由返回健康状态。
  • 数据库检查:一个模拟函数检查数据库是否已启动。在实际场景中,您会在此处尝试建立数据库连接。
  • 外部 API 检查:另一个函数通过发出简单的 HTTP 请求来检查外部 API 是否可用。
  • 磁盘空间检查:我们使用 Python 的 `shutil` 库检查磁盘使用情况,并报告磁盘空间是否充足。
  • 健康检查端点:`/health` 路由聚合来自各种检查的结果,并将它们作为 JSON 响应返回。

使用 Python 实现健康检查的优缺点

现在我们将讨论使用 Python 实现健康检查的一些优点和缺点。

健康检查的优点

  1. 易于实现: 幸运的是,使用 Flask 或 FastAPI 等工具请求健康检查的配置非常少。
  2. 实时监控: 健康检查提供有关服务状态的信息更新,以帮助您检测问题何时发生。
  3. 自动化友好: 健康检查可以与其他监控实用程序结合使用,并借助它们在发现问题时发送警报并执行操作。
  4. 可定制: 根据您的具体需求,您可以从简单的磁盘空间检查到复杂的服务依赖项类型进行健康检查。
  5. 提高可靠性: 必须定期进行健康检查,以确保您提供的服务可用,并且可用性将有助于提高应用程序的可靠性。
  6. 支持微服务: 在微服务架构中,健康检查至关重要,因为它用于确定多个部分或服务的状态。

健康检查的缺点

  1. 开销: 如果未优化,频繁的健康检查会增加系统的额外负载,尤其是对于重型服务。
  2. 误报/漏报: 编写不当的健康检查会导致服务健康状况报告不正确,这对于健康的服务以及不健康或不健康的服务都令人困惑。
  3. 需要维护的额外代码: 还需要使健康检查代码与主应用程序并行运行,从而增加其复杂性。
  4. 范围有限: 健康检查通常只能检测到高级别问题(例如,“服务已关闭”),而忽略了更深层次的性能问题。
  5. 资源密集型检查: 某些检查可能耗时,例如检查数据库连接或 API 状态,过度执行这些检查可能会导致系统速度变慢。

结论

在 Python 中使用健康检查可以防止应用程序出现不可靠或容错问题,并且非常重要,应将其添加到应用程序中。通过使用这种设置,您可以更多地了解您的系统并可以纠正出现的任何问题。