个人项目也要做可观测性:AI Gateway 日志与用量
架构与工程实践42 阅读约 4 分钟
「个人项目而已,要什么可观测性?」——这是我以前的想法,直到博客接了按量付费的 LLM。那一刻我意识到:个人项目没有团队盯着,反而更需要让系统自己「会说话」,否则出了问题(尤其是花钱的问题)你根本不知道。
好消息是,靠托管组件自带的能力,加可观测性几乎零成本。
三个最该看的维度
对我这个带 AI 的博客,最该被观测的是三件事:花了多少钱、服务活没活、出了什么错。
1. 用量与花费:AI Gateway 是天然看板
所有 LLM 调用都经过 Cloudflare AI Gateway 这一个出口。这个「统一出口」的设计本身就送了我一块用量看板:每个请求的 token 数、延迟、缓存命中、错误率,全在 Gateway 的控制台里。
把所有 LLM 调用收口到一个网关,可观测性是顺带的福利:
- 哪天用量异常飙升,一眼看出来(可能被刷了);
- 平均延迟、P95 一目了然;
- 配合它的限流,花费有看板也有闸门。
对花钱的资源,能看见用量是底线。 看不见用量的 LLM 调用,等于把信用卡交给一个看不见的进程。
2. 活性:健康检查端点
每个服务暴露一个 /health 端点,部署脚本用它判断「真的 ready 了没」,外部探活也用它。它便宜(就一个返回 200 的路由)但回报高——部署时挡住起不来的版本、平时让你(或 UptimeRobot 这类免费探活)第一时间知道某个服务挂了。
3. 错误:结构化日志
Workers 和 NestJS 都有现成的日志。关键不是「有没有日志」,而是关键路径都打了日志、且能查:
// 同步失败这种「静默副作用」尤其要打日志——它不抛错,
// 不记下来就真的无声无息了
catch (error) {
this.logger.error(`S3 upload failed: ${(error as Error).message}`)
throw new UploadFailedException()
}
像 fire-and-forget 的 Webhook 同步,失败是被刻意吞掉、不冒泡的——这种「静默副作用」必须留日志,否则它出了问题你永远发现不了。
个人项目的可观测性原则
- 优先白嫖托管组件的自带能力:AI Gateway 的用量、平台的日志、容器的健康状态——这些不花额外力气就有,先用满。
- 统一出口 = 免费看板:把同类调用(尤其花钱的)收口到一个网关/客户端,可观测性是副产品。
- 花钱的东西必须可见:LLM、对象存储这类按量计费的资源,用量看板不是锦上添花,是防止账单意外的护栏。
- 静默路径重点打日志:越是「不会报错给你看」的异步副作用,越要主动记录。
- 别过度:个人项目不需要全链路追踪、不需要自建 Prometheus 全家桶。够用就好,重点是「关键问题能被发现」。
小结
个人项目的可观测性不是「上一套监控系统」,而是「让系统在关键处会说话」:用 AI Gateway 自带看板盯住 LLM 花费、用 /health 端点判活、用结构化日志记下静默的失败。成本极低,但能让你在账单暴涨、服务宕机、副作用静默失败时第一时间知道——这对没有团队兜底的个人项目,恰恰最重要。
相关文章
评论 (3)
Ken
服务拆开后本地开发体验怎么保证?
山有木兮
README/LICENSE 这套最小开源清单很实用
半夏
可观测性这块小项目常被省掉,其实最该有


