Skip to content

第 9 章 日志、监控与告警:出事之前先知道

三个词先分家:日志是系统写的日记,出事后翻;监控是持续量体温的仪表盘,随时看;告警是体温超标自动打给你的电话,不用一直盯。大多数个人项目停在"有日志但不会看"这一级——今晚往上爬两级。

**第一步:画出日志地图。**我们的日志散落在四大件里,各有各的入口:Vercel 的函数日志(第一册第 14 章提过的那个);Supabase 的数据库与 Auth 日志;DO 上,服务的日记用 journalctl -u 服务名(第 3 章的管家日记),Nginx 另有 access log 和 error log;Cloudflare 则有整体流量分析。于是排障的完整咒语终于凑齐了:**症状定层(每章末尾攒的那张表),层定日志(本章这张地图)。**两步走完,"网站坏了"就变成了"去翻某一本具体的日记"。

**第二步:会读一行日志。**拿 Nginx 的访问日志当标本:

203.0.113.7 - - [24/Jul/2026:20:14:03] "GET /api/v1/certificates/abc HTTP/1.1" 200 512 0.003

从左到右:谁(IP)、何时、要什么(方法加路径——第 7 章设计的窗口,在这里留下脚印)、结果如何(状态码,那几张头牌脸)、回了多大、花了多久。最原始也最有效的巡逻术,是第二册的 grep:grep " 500 " access.log——把所有"我这边坏了"的瞬间抓出来排队。

第三步:给 AI 立打日志的家规(可直接进 CLAUDE.md):其一,关键动作必留痕——谁、何时、做了什么;其二,错误日志必须带上下文——只写一个 "failed" 是对未来自己的犯罪,要写"给谁、做什么、因为什么失败";其三,秘密永不进日志——密码、完整的 API Key、令牌,一个都不许。日志天生会被到处传阅(贴给 AI、发给爸爸、存进监控平台),第一册第 9 章的纪律在这里长出了新的一面。

**第四步:最小监控三件套。**别贪多,三个数字起步:网站还活着吗——配一个 uptime 探针(这类免费服务每分钟替你打开一次网站,打不开就发邮件);磁盘还剩多少——第 2 章说过,日志撑爆磁盘是裸服务器的头号杀手,让探针或定时任务盯着 df;错误率有没有突跳——各平台的仪表盘都有现成图。配告警时守一条黄金法则:每条告警必须对应一个行动。会响但不需要你做任何事的告警,唯一的作用是训练你忽略告警——那是给自己安装"狼来了"。宁少勿滥。

出事时想起我(本章是"想起我"们的总部)

用户说"昨晚打不开"而你毫不知情——缺 uptime 告警,今晚补上;排障时东翻西找像无头苍蝇——先默念咒语:症状定层,层定日志;日志翻到了却查不到关键信息——家规第二条没立,回去补上下文。

关键领悟

日志是写给"出事后的你"的信,监控是替你值班的眼睛,告警是只在需要行动时才响的铃。三件套的唯一目标:让你永远比用户先知道。

试一试(安全档:只读,外加一个小设置)

把四大件的日志入口各打开一次,做成一页"排障地图"(哪层的日志在哪看,一层一行)存进项目文档。然后给网站配上第一个 uptime 探针,告警发到你和爸爸都看得到的邮箱——这套书里第一位"替你值班"的员工,今晚上岗。

由 Charles Tao 与 Claude 协作写成——这本身就是这套书讲的工作方式。 · 许可