结论先行:提起日志分析,多数人想的是「谁在什么时候做了什么」。但现代系统里,日志中相当一部分动作来自程序而不是人:接口之间的调用、定时任务的执行、自动化脚本的下发、设备与采集端的心跳。把这些动作和人的操作放在同一条基线里计算,会同时造成两种后果——机器的规律性波动被当成正常,掩盖了人的异常;人的正常变化被当成偏离,淹没了真正的信号。分开建基线,是让异常能被看出来的前提。

为什么日志里「不是人的动作」越来越多

系统之间的连接在过去需要人点一下,现在多数由程序完成。配置由平台统一下发、数据由接口定时同步、巡检由脚本按计划执行、状态由设备主动上报。这些动作同样会产生日志,同样带着账号、时间与来源,从字段上看和人的操作没有区别。

它们的特征却很不一样。程序的动作往往高度规律:固定的时间点、稳定的间隔、接近的调用量、集中的访问来源。人的操作则带有明显的作息与随机性。把两类混在一起,基线就成了一个平均值,而这恰恰是行为分析里最没有意义的那个数。

混在一起会丢掉什么

量级判断失准

一个服务账号每天定时跑批量任务,调用量本身就是人工作量的数十倍。如果基线里包含这些动作,那么一个人的访问量翻了数倍,可能仍然落在「正常区间」内。

范围判断失效

程序访问的对象通常固定且集中,人的访问对象则分散。合并之后,任何一次范围扩张都会被程序的历史记录稀释掉,而范围扩张往往是比量级更早出现的信号。

时间特征被抹平

非工作时段的活动常被当作可疑线索。但程序恰恰常在非工作时段运行。若不加以区分,这条线索要么天天报警、要么被迫整条关掉。

怎么做区分

把账号按性质分组

人员账号与程序账号分开登记,并在账号层面就带上性质标记。这一步的好处是后续所有统计都可以按组出基线,不需要在分析阶段临时判断。

识别动作的规律性形态

程序动作有几个可识别的形态:固定间隔的周期性、稳定的调用量、集中的来源、很少出现人工才有的中间步骤。把这些形态做成规则,可以先做一轮自动归类,再由人确认。

两类基线分开维护

人员账号的基线关注作息、访问范围与量级变化;程序账号的基线关注是否偏离它一贯的调用模式——比如出现了从未访问过的对象、调用量突然抬升、执行时间点发生变化。程序账号的偏离,往往对应的是脚本被改动、凭据被挪用的情形。

一个容易被忽略的前提

不管是人还是机器,基线要成立,前提是日志里能分清「是谁在动」。如果访问是通过共享账号发起的,或者查询类接口不需要身份核验,那么日志里只有来源地址和时间,任何分析都无从下手。分类是后面的事,把主体标识补上才是起点。

边界与前提

区分人与程序这件事没有一劳永逸的做法。自动化程度的提升会让程序动作的占比持续上升,分类规则需要定期复核。此外,程序账号的基线不代表无需人工审视:它异常时说明程序的行为变了,而程序为什么会变,仍然需要人来判断。

奇摩在做日志与可观测平台落地时,会把账号性质与访问关系纳入前期的接入梳理,避免平台建起来之后数据本身无法支撑分析。需要梳理日志接入口径与分析基线,欢迎 预约咨询。