先把两个报表的时区都换算成同一个基准时区,再按“自然日边界”重新切分数据,而不是直接比较报表上标注的日期。如果两个报表一个用UTC、一个用北京时间,那么北京时间某天0点到8点的数据,在UTC报表里属于前一天;直接按日期列对齐,就会把同一天的事件拆到两个日期上,导致恶意代码检测的命中数、受影响页面数出现对不上的情况。
对齐之前,需要先确认每个报表的时间字段到底代表什么。常见情况有三种:
可以做一个实际动作:从两个报表里各取一条能唯一识别的事件,比如同一个恶意跳转URL的首次命中时间,把两边显示的时间值列出来。如果差值正好是固定小时数(如8小时或16小时),基本可以判断是时区偏移;如果差值不固定,则可能是采集延迟或去重逻辑不同,不能简单按对齐处理。
两个报表对不上,通常有两种解释。
解释一:只是时区边界偏移。两个报表统计的是同一批事件,只是“一天”的起止点不同。这种情况下,把两个报表都换算成UTC后重新按UTC自然日聚合,命中总数应该能对上,只是日期归属会移动。
解释二:统计口径本身不同。比如一个报表统计的是请求次数,另一个统计的是去重后的受影响URL数;或者一个包含扫描器探测,另一个只保留确认存在恶意代码的页面。这时即使时区对齐,数字也不会相等,因为分子分母定义不同。
可以取一个覆盖时区边界的短时间窗口来核对。假设两个报表分别是UTC和北京时间,取北京时间某天0点到8点这个区间,对应UTC前一天16点到当天0点。
如果A和B的事件ID基本重合,只是被归到了不同日期,那就是边界偏移,按统一时区重新聚合即可。如果A和B的事件ID有明显差异,比如B里多出一批只在特定时段出现的记录,那就要进一步看这批记录是不是来自不同采集点、不同去重规则,或者其中一个报表把某类扫描流量排除掉了。
时区对齐只是第一步。两个报表可能对“一天”的定义也不同:一个按自然日0点切分,另一个按滚动24小时窗口统计。滚动窗口下,同一条记录会在相邻两天的报表里各出现一次,直接相加会重复计数。
实际操作时,可以要求两个报表都输出带完整时间戳的明细,而不是只给按天汇总的数字。拿到明细后,用同一个时区、同一个自然日边界重新聚合,再对比结果。这个动作的结果会直接决定下一步:如果重新聚合后数字一致,说明问题只出在展示层;如果仍不一致,就需要回到采集和去重环节,检查是否有记录在入库时被丢弃或合并。
多个角色对同一份恶意代码检测数据有不同理解时,与其争论哪个数字对,不如把分歧拆成可核对的条目:
把这些条目逐项确认后,再取一个共同时间窗口重新聚合。如果仍然对不上,差异本身就成了一条线索:它可能指向采集覆盖不全、去重规则不同,或者某个报表在导出时做了额外过滤。此时不要急着用其中一个数字覆盖另一个,而是保留两份明细,标注各自口径,让后续核对有据可查。