凌晨两点十七分,网站巡查我收到一条告警短信:首页接口响应时间从180毫秒飙到4.2秒。网站巡查爬起来开电脑,网站巡查先ping了一下服务器,网站巡查延迟正常。网站巡查又试了试静态资源加载,网站巡查也快。网站巡查问题出在数据库查询上——有人写了个没有索引的网站巡查模糊搜索,上线不到三小时,网站巡查把连接池占满了。网站巡查
这就是网站巡查网站巡查的日常。不是网站巡查坐在监控大屏前喝咖啡,而是网站巡查半夜被叫醒,对着日志一行行翻。网站巡查巡查这个词听起来挺正式,网站巡查其实就是定时或不定时地看网站有没有出毛病。毛病分两种:一种是明面上的,页面打不开、图片裂了、按钮点了没反应;另一种藏得深,比如某个接口在特定参数下会超时,或者数据库慢查询在凌晨低峰期才暴露出来。
我习惯把巡查拆成三层。最外层是可用性,用工具每五分钟请求一次首页和几个关键页面,看返回码和响应时间。这层最容易做,也最容易骗人——只要页面能返回200,工具就认为一切正常。可用户看到的可能是个白屏,因为前端JS报错了,或者接口返回了空数据。所以第二层得看接口。我会写几个脚本,模拟用户登录、搜索、下单这些动作,检查返回的JSON结构对不对,关键字段有没有值。有一次发现商品详情页的“库存”字段一直返回0,但数据库里明明有货。查了半天,是缓存没更新,运营那边改了库存,缓存还挂着旧数据。这种问题监控工具根本不会报,得靠巡查脚本比对数据库和接口返回值。
第三层最费精力:日志巡查。不是看有没有报错,而是看那些“不报错但不对劲”的日志。比如某个接口的响应时间从平均200毫秒慢慢涨到800毫秒,没有超时,没有异常堆栈,但趋势不对。这时候去翻代码,往往能挖出内存泄漏或者连接没释放的问题。还有一次,我在Nginx日志里发现某个IP每分钟请求同一个页面六十次,User-Agent是空的。不是攻击,是个爬虫写错了循环逻辑。封掉之后,服务器负载降了三分之一。
巡查的频率看网站体量。小站一天一次手动看,大站得靠自动化加人工抽查。自动化工具能覆盖百分之八十的常规问题,但剩下百分之二十的怪毛病,还得靠人盯着。比如某个CSS文件在Safari上加载失败,Chrome正常;或者某个地区的用户反馈图片加载慢,其他地区没事。这些工具测不出来,得靠真实用户反馈或者多地拨测。
我见过最离谱的一次巡查事故,是运维把测试环境的数据库配置推到了生产环境。网站看起来正常,首页能打开,但所有用户登录都失败。因为测试库里的用户表是空的。巡查脚本只检查了首页HTTP状态码,没检查登录接口。后来加了登录态的巡检,才把这个漏洞补上。
巡查不是找茬,是保命。网站跟人一样,平时看着好好的,突然哪天就出毛病。定期巡查就是量血压、测心率,把问题摁在爆发之前。凌晨两点十七分那条告警,后来加了索引,改了查询逻辑,连接池再没满过。但我知道,下一个坑已经在某个角落等着了。