结论先行:日志里对不上的时间,绝大多数不是平台算错,而是同一批日志带着三种不同的时间基准进了库。设备自带时钟、采集端接收时间、入库时间,只要其中一种没对齐,跨设备关联、去重统计、事故时间线会同时失真,而且系统不会报任何错。
一条日志身上,其实带着三个时间
先把三个时间分开,很多争论会自动消失。
其一,设备时间——最不可靠,却是事件本身的时间
它由设备自己的时钟产生,写进日志正文。防火墙、交换机、服务器、数据库、中间件都有这么一个时间。问题在于设备时钟的品质差别很大:有的接了对时源,有的只在出厂时校过;有的设备断电重启后从硬件时钟起算,跑一段时间就漂;还有一类设备干脆不提供对时功能。
其二,采集时间——平台盖章的时间
日志进入采集端时,平台会补一个接收时间。它永远单调递增、永远可信,但它记录的是「这条日志什么时候被收到的」,不是「事情什么时候发生的」。网络抖动、采集端队列积压、断点续传补偿,都会让采集时间比事件时间晚上几秒到几小时。
其三,入库时间——用于运维,不用于分析
写入存储的时间,主要用来做冷热分层、留存期计算和索引重建。它跟业务分析基本无关,但经常在排查时被误当作事件时间。
差三分钟,会坏在四个地方
| 坏在哪 | 表现 | 为什么会这样 |
|---|---|---|
| 关联分析 | 同一笔交易在两边各查到一半 | 时间窗按设备时间对齐,两条记录落不进同一个窗口 |
| 去重统计 | 同一条日志被算成两条,指标翻倍 | 去重通常在时间窗内做内容比对,窗口错位就判成不同事件 |
| 告警顺序 | 后发生的动作被排在前面 | 攻击链还原依赖先后顺序,时间漂移会让因果颠倒 |
| 审计时间线 | 审计时说不清谁先谁后 | 对外举证的时间线要与业务系统、工单系统交叉印证 |
这四种失效有一个共同特点:不会报错。数据看起来完整,条数看起来也对,只有到真正要用的时候,才发现串不起来。
时区与格式:同一批设备能写出三种样子
时间偏差之外,还有一类更常见的问题:写法不统一。同一批日志里同时出现本地时间、UTC 时间、带时区偏移的时间,甚至同一台设备在不同模块里用两种格式。平台如果不做统一,搜索时按时间过滤就会漏数据——你以为查了这个小时的全部日志,实际只查到了其中一部分。
处理方式不是让每台设备都改配置,而是在治理层统一:入库前把时间字段标准化,原始值保留一份,显示和检索用标准值。原始值不能丢,出了问题要能回看当时到底写的是什么。
把基准定下来,四件事
- 确定统一的基准来源。内网里选一到两台稳定的时间源,其余设备向它对齐,不要让所有设备各自去外部对时。
- 分批推进,先易后难。服务器与网络设备一般都能对时,先从这两类做起;不能对时的设备单独列表,作为已知偏差登记。
- 采集端保留接收时间。设备时间不可信的场合,用采集时间兜底,但要在字段上明确标注这是接收时间,避免后面的人误用。
- 建立偏差台账。把每类设备当前的时间偏差记录下来,定期复测。台账的意义在于:将来出现关联失败,能快速判断是不是偏差造成的。
接入验收,核三处就够
- 核同一个事件在两端的时间差。挑一个能同时产生两边日志的动作,比如一次登录,把两侧记录的时间并排看,差值应该在一秒以内。差几十秒以上,就是要处理的问题。
- 核时区写法。随机抽几类设备,看入库后的时间字段是否统一,原始值是否还查得到。
- 核不可对时设备的登记。这类设备有多少台、当前偏差多少、谁负责复测,应该有明确记录。
边界与前提
时间基准这件事有明确的适用边界。完全离线、按需联网的采集场景里,设备时间无法在线对齐,只能靠采集时间兜底,此时跨设备关联的精度会下降,需要在分析口径里写清楚。另外,对时本身会带来极小的时钟回拨风险,调整幅度大的设备建议在维护窗口内操作,避免影响依赖时间戳的业务逻辑。
深圳市奇摩计算机有限公司在做日志平台接入时,会把时间基准写进接入验收单,和设备清单一起交付,而不是留到出问题再回头查。
本文只谈日志侧的时间基准怎么统一,不谈日志该收哪些内容、也不谈告警规则怎么配,这两件事另篇再讲。
如果正在准备日志平台的接入验收,可以把现有的设备清单和时间写法先梳理一遍,再来对照本文的三处核查。预约咨询
