核心做法是先把“出问题时才存在的证据”变成“不需要人在场也会留下的证据”:在托管机上放一个低开销的定时采集脚本,按固定间隔记录时间、进程状态、监听端口、连接数和最近的错误日志行,写进本地文件并轮转保留。你不需要平台方给完整监控权限,也不需要复现故障,只要保证故障时段有人(或程序)在采样。下面用一个假设情境把决策过程走完。
特定时段出现,通常落在三种模式里,它们的取证方向完全不同:
区分方法很简单:把连续几天的故障时刻和本机定时任务表、访问量曲线各画一条时间轴,看哪条对得上。对不上的模式不要急着采证,先确认时间基准是否一致——托管机时区和你的观察时区不同,会把固定时钟型误判成随机型。
以下为假设示例,用于说明方法,不代表任何真实项目。假设你托管在重庆的一台服务器,业务方反馈每天凌晨两点前后有几分钟接口超时,白天完全正常。你没有平台侧的完整监控面板权限,只能登录主机。此时可执行的最小动作是:写一个每分钟执行一次的采集脚本,持续记录到第二天。
脚本记录四类内容:当前时间与运行时长;关键进程是否存在、CPU 与内存占用;监听端口与已建立连接数;应用错误日志中最近若干行。输出追加到本地文件,并用按天切分的方式控制体积。第二天你拿到的不是“故障那一刻的截图”,而是一条可对照的时间序列。如果凌晨两点这一分钟进程消失、连接数归零,方向指向进程崩溃或被系统终止;如果进程还在但连接数堆满、错误日志出现超时,方向指向资源或下游依赖。这个动作的结果直接决定下一步:前者去查系统日志里的终止原因和内存上限,后者去查连接池配置和下游响应时间。
频率越高,越可能抓到瞬时状态,但也会让日志本身成为负担,甚至在磁盘紧张时放大问题。一个可用的起点是:状态类指标每分钟一次,错误日志每次采集只取新增部分,保留七到十四天。若故障只持续几十秒,每分钟一次可能整段错过,此时改为每十秒一次,但只在高风险时段启用,例如已知的凌晨窗口,其余时间降回每分钟。
保留策略要写清轮转条件,否则一次故障排查留下的文件可能塞满分区,反而制造新故障。轮转按大小和天数双条件触发,并确认轮转动作本身不会在故障时段执行——否则你会把“日志切割导致的短暂卡顿”误认为业务错误。
能区分的证据通常是成对出现的:进程消失加系统日志里的终止记录;连接数饱和加下游响应变慢;磁盘写入等待升高加定时任务启动。单独一项往往有多种解释。例如错误日志在某一分钟为空,既可能是服务正常,也可能是采集脚本自身没跑起来、日志被轮转走、或进程已无法写日志。因此采集脚本要同时记录“我是否成功执行”,否则空档无法解释。
同样,请求量或抓取量在某个时段归零,不能单独证明是你这边处理正确或对方停止访问——它也可能是采集中断、网络路径变化、对方策略调整或统计口径变化。把这类现象当作线索而非结论,再用第二类证据交叉验证。
在没有平台侧网络设备日志、没有宿主机层监控的情况下,你能确认的是“本机视角下发生了什么”,不能确认的是“流量是否到达机房、是否被上游拦截、是否由同一机柜的其他设备引发”。这两者的边界要在结论里写明,否则容易把本机现象当成全局原因。
可执行的最小动作清单:
如果采集结果指向网络路径而非本机资源,下一步应向托管方索取该时段对应设备的日志,而不是继续在本机加采集项;如果指向本机进程,则先复现资源条件再改动配置。把这一步的判断依据留成文字记录,下次同类故障就能直接跳到对应分支,而不必从零开始抓证据。