我管理一个网络服务,对于我的公司来说,检测并通知是否有任何服务关闭以及它所做的任何操作是否需要太长时间才能响应是非常重要的。到目前为止,有一个单独的 Web 应用程序(包括前端和后端)只是为了每 15 分钟向这些端点请求随机操作,但我发现它很复杂,因为它需要维护一个完整的 Web 应用程序只是为了这个目的,而且我知道许多免费的 Web 服务应该做的工作。
我已经设置了 AWS Healthchecks 来替换轮询 webapp,并且非常适合正常运行时间部分,现在我的问题来自响应时间部分。
所有这些 API 运行状况检查服务似乎都为不太复杂的请求做好了准备,因此,API 应该负责为运行状况检查服务提供“状态”端点,并在“OK”中包含数据库延迟等内容,或者应该是“运行状况检查器” “负责执行复杂请求的人?什么方法更正确?
谢谢!
您可能不应该通过应用程序的健康检查路径监控数据库性能 - 可能会发生一些危险情况。假设您在 AWS 中使用 ASG,并使用 LB 健康检查来确定 ASG 是否应该轮换机器。如果您开始出现数据库争用(与您的应用程序无关),您的 ASG 将开始删除节点。因此,您不仅会有性能不佳的数据库,而且还会有一个耗尽的 ASG。
通常应该在健康范围之外监控性能。我们大量使用 statsd 并将我们所有的指标、应用程序和数据库注入其中,以便我们可以根据它绘制图表并发出警报。
另外请记住,随着您的扩展,您的健康检查速度也会随之扩展 - 我们有一些服务每秒会接收数千个健康检查请求,如果每个服务都在执行综合昂贵的查询,我们的数据层将离线.
随着您添加缓存层,逻辑也变得更加复杂 - 如果数据库健康但您的 KV 缓存不健康,健康检查端点应该返回什么?
总体而言,虽然端到端监控对于有效的监控策略至关重要,但我强烈建议对流入数据库的现有查询指标进行带外监控——这些指标代表真实用户性能,将为您提供可量化的指标您的应用程序运行状况的实际执行情况。