← 所有文章
监控类型 · 8 分钟阅读

如何监控 REST API 的正常运行时间和响应时间

A code editor showing API request and response in a dark theme.

监控 REST API 与监控网站不是一回事。来自 API 的成功 HTTP 200 并不能保证响应内容正确、响应时间可接受,或者认证仍然有效。本指南介绍 API 监控实际应该检查什么、能尽早捕获问题又不至于嘈杂的阈值,以及简单 ping 检查会遗漏的静默故障模式。

API 监控应该检查的四件事

一个有用的 API 监控会在每次探测时检查四件事。每一项都能捕获其他几项漏掉的一类故障。

状态码:API 返回的是 200,还是 500、502 或 503?响应时间:API 是否在可接受的窗口内响应?响应体内容:响应是否包含预期的字段?认证状态:API 是否仍然接受昨天还在接受的凭据?同时检查这四项的监控,能捕获任何单一检查都会遗漏的异常行为。

值得监控的端点

并不是每个 API 端点都需要监控。三类端点能覆盖大部分实际价值。

  • 一个健康检查端点:通常是 /health 或 /status。它应该返回 200,带一个小型 JSON 负载,确认数据库连接以及任何关键依赖项。探测开销低,出问题时失败迅速。
  • 使用最频繁的真实端点:承担你最大流量比例的那个。如果你的 /users/me 端点服务 80% 的请求,就直接监控它。一旦它出问题,你的客户会立刻发现。
  • 收益最高的真实端点:处理支付、订阅或任何直接转化为收入的端点。同样的监控方式,更高的告警优先级。

设置响应时间阈值而不触发误报

响应时间告警是制造嘈杂监控最简单的方法。部署期间一次缓慢的探测不是信号;连续十次缓慢的探测才是。行之有效的阈值策略是基于百分位的,而不是基于绝对值的。

测量端点在正常一周内的 p95 响应时间。把告警阈值设为 p95 的 2 倍。仅当连续三次探测超过该值时才告警。结果是一个忽略正常波动、但能捕获真实性能下降的监控。在第一个月内调整倍数和连续次数,之后就不再动它。

简单 ping 检查会遗漏的静默故障模式

API 可以返回 HTTP 200 但仍然处于损坏状态。真实事件中常见四种静默故障。

  • 被缓存的错误响应:API 正确地返回过一次 500,在 CDN 处被缓存,从此之后就一直提供带有过时错误内容的 200。
  • 错误的内容类型:由于调试中间件未关闭,API 返回 HTML 而不是 JSON。状态是 200,响应体无法解析。
  • 空的成功响应:API 返回 200,但结果集为空,因为底层查询在一次迁移中悄悄丢失了一个 join。
  • 认证漂移:API 返回 200,因为速率限制器优雅地处理了未认证请求,但响应体写着「请登录」。

在不泄露凭据的前提下进行认证监控

许多 API 在每个端点上都要求认证。监控需要凭据。两种模式效果不错;一种常见模式存在严重的安全风险。

好做法:一把专用的只读 API key,作用域尽可能窄,每季度轮换,在监控工具中加密存储。更好的做法:使用 webhook 签名或 HMAC 来代替 bearer token,这样监控就无法冒充用户。糟糕的做法:把一个长期有效的生产管理员用户 bearer token 粘贴到监控配置中。第三种模式会在监控的凭据泄露时引发它自己的事件。

API 的入门监控配置

为每个 API 添加三个监控。一个 /health 监控,60 秒频率,响应时间阈值为 500 毫秒。一个针对使用最频繁的实际端点的监控,60 秒频率,带有响应体内容断言。一个针对收入最高的端点的监控,30 秒频率,使用相同的响应体断言加上更严格的响应时间阈值。监控总数:三个。覆盖范围:大部分关键内容。当真实事故中出现边缘情况时再添加针对性的监控,不要预先设置。

免费试用 MonitorAH

三个监控、不到一分钟即可设置告警、无需信用卡。在您阅读这段文字的时间内,即可覆盖一个网站和一个定时任务。

开始监控

相关文章