结论先说:采样频率太低时,不要指望事后把曲线“拉细”,而要把短时异常转成可被低频采样命中的信号。对站长手里的一个具体页面或一台服务器,可行路径只有两条——提高采样密度,或把异常判定从“看瞬时值”改成“看累计量、看事件、看日志”。选哪条,取决于异常持续时间、你能承受的监控开销,以及你事后是否还需要还原现场。
低频采样漏掉的,通常是几秒到几十秒的尖峰。假设你每5分钟采一次响应时间或CPU占用,一次持续20秒的抖动几乎不可能被采到;但如果异常持续十几分钟,低频采样大概率能碰到一两个点。所以第一步不是换工具,而是先问:这个异常大概持续多久?
可用的判断证据包括:用户投诉集中在某个短时段、错误日志里出现密集的同一类报错、上游或下游服务在该时段有超时记录。如果这些证据都指向“几十秒内发生又消失”,那属于尖峰,靠加大采样间隔的收益有限;如果证据显示“某个时间段整体变差”,那提高采样频率或缩短上报周期就能明显改善。
这一步的实际动作是:把你手头那个页面的监控曲线、访问日志、错误日志按同一时间轴对齐,找出异常发生的起止时间。结果会直接决定下一步走“提密度”还是走“换指标”。
路线一:提高采样密度。适用条件是异常持续时间和你的采样间隔在同一量级,或者你确实需要还原曲线形状。代价是存储、传输和聚合成本上升,采样点变多后,原本平滑的图会变得嘈杂,反而更难看出趋势。如果只是偶尔排查一次,可以临时把采样间隔调小一段时间,排查完再调回,而不是长期保持高频。
路线二:不改采样频率,改判定对象。适用条件是异常短暂但影响可累计。具体做法是把“瞬时值超过阈值”换成“一个采样周期内的累计次数、累计耗时或错误计数超过阈值”。例如不记录每秒的响应时间,而是记录这5分钟内“响应超过2秒的请求数”。这样即使采样点稀疏,只要异常发生过,计数就会留下痕迹。
取舍的关键在于:你需要的是“知道出过事”,还是“知道出事时的完整曲线”。前者用累计量和事件计数更划算;后者才值得付出高频采样的代价。两者都成立时,可以只对核心页面或核心接口开高频,其余保持低频。
采样是抽样的,日志是逐条的。当采样频率不够时,最直接的补救是把判定依据从指标转向日志和事件:慢查询日志、错误日志、访问日志里的状态码分布、超时记录、重启记录。这些数据天然按事件产生,不受采样间隔限制。
实际动作可以这样安排:先给关键路径加一条“超过阈值就写一条日志”的规则,日志里带上时间戳和耗时;再用日志聚合按分钟统计条数。结果是你能看到“哪一分钟出现了异常集中”,即使指标图上什么都没有。下一步再决定是否要为这一分钟单独提高采样密度。
要注意一个常见误判:某个时段请求量或抓取量归零,不等于服务一定出问题。可能是采集端自己断了、日志轮转、上游限流,或该时段本来就没有流量。归零只能作为线索,必须和日志、上游记录交叉验证后才能下结论。
假设你对一个商品详情页做监控,采样间隔5分钟,只记录响应时间平均值。某天有用户反馈“偶尔很慢”,但平均值曲线平稳。你可以先假设异常持续约30秒、发生在整点附近,于是做两件事:一是把该页面的错误日志和慢请求日志按分钟聚合,二是临时把采样间隔调到30秒并只保留一天。
如果日志聚合显示某一分钟慢请求数明显高于其他分钟,说明异常确实存在且可被计数捕捉,此时保留“按分钟统计慢请求数”这条长期规则即可,不必长期高频采样。如果日志里什么也没有,而临时高频采样也没抓到,那更可能是用户端网络或第三方资源问题,下一步应转向排查外部依赖,而不是继续加大自身采样密度。这个例子里的数字只是说明比较方法,不代表任何真实监测结果。
具体工具是否支持按周期累计、是否支持临时调整采样间隔、日志保留多久,这些都需要以你正在使用的工具实际说明为准,不同产品差异很大。把上面这套判断顺序固定下来,换工具时也不用重新摸索。