先确认两个报表各自用的是什么时间口径:如果一个是扫描器按UTC记录的发现时间,另一个是站内日志按本地时区记录的访问时间,那么“同一天”并不天然对应同一批事件。对齐的正确做法是先统一到一个基准时区,再按该时区重新切分日期边界;直接按各自日期字段拼接,会把跨零点的记录错配到相邻两天。
时区不同只是表象,两个报表的日期字段可能本来就不是同一类事件。扫描器报表里的“日期”通常是漏洞首次发现或被确认的时间,站内统计里的“日期”往往是请求发生的时间。即使把两者都换算到UTC,一条漏洞从被发现到被访问命中,也可能落在不同日期。因此对齐前要做一次字段核对:确认每个报表的日期列代表的是事件发生时间、入库时间还是汇总时间。若其中一个是汇总时间,按它切分一天就没有分析意义,应改用原始事件时间。
一个可区分原因的证据是:把两个报表都换算成同一时区后,看跨零点前后一小时的记录是否成对出现。如果换算后仍大量错位,问题多半在字段口径而非时区。
三种处理方式的适用前提不同,代价也不同。
如果两个报表中有一个只有“日”粒度而无具体时刻,改写时区没有意义,只能退出并回到更细的数据源,或明确接受日期边界存在一天误差。
选定基准时区后,具体动作是:把两个报表的时间字段都转换为该时区的带时区时间戳,再按该时区的自然日分组,而不是先按各自本地日期分组再合并。以某次假设的排查为例,假设扫描器用UTC记录,站内日志用UTC+8记录,一条记录在UTC时间23:40被发现,对应站内时间是次日07:40。若直接按各自日期拼接,它会被算进不同的两天;统一到UTC后,两者都落在同一天。这个动作的结果会直接影响下一步:如果统一后错位记录明显减少,说明差异主要来自时区,可以继续用换算方案;如果错位依旧,就要回到字段口径去查。
转换时注意夏令时。若某一方所在地区实行夏令时,固定偏移量换算会在切换日产生一小时误差,应使用带时区规则的转换而非手工加减。
时区对齐只解决了日期边界问题,不代表两个报表的其他口径也一致。对齐后应做一次抽样核对:从统一后的同一天里各取若干条记录,确认它们指向的是同一批对象。若扫描器报表按漏洞条目计数,而站内统计按请求次数计数,即使日期对齐,数量级也不可直接比较。
另外,请求量归零或抓取量下降不能单独证明时区处理正确,也可能是采集中断、过滤规则变化或数据延迟。判断时应结合原始时间戳是否连续、是否有缺失时段来交叉验证,而不是只看某一天的汇总数字。
最终选择取决于你能否拿到原始时间戳:能拿到就优先在分析层统一换算并保留原报表;拿不到就只能退回数据源重取,或明确标注该报表只支持到日粒度、存在一天边界误差。