Squid 的原生访问格式以 epoch 时间戳开头,通常写作 %ts.%03tu:即自 epoch 起的秒数,后面跟三位毫秒数字。该位置上的值并不是格式化后的日历日期。

先检查当前生效的 access_log 格式。对于 Squid 7,请查看该实例的access_log 输出与格式选择。自定义日志格式、syslog 前缀或下游日志处理器都可能在显示行的开头放入不同的时间戳。

三项检查可缩小范围

  1. 用正确的单位解码该数值。小数位是秒值的一部分,而不是另一个以毫秒为单位的完整时间戳。
  2. 把解码出的 UTC 时间与本地时间显示作比较。时区差异会移动显示的小时,有时还会移动日历日期;但它无法解释相差数年的日期。
  3. 把一条新记录与运行该 Squid 实例的机器的时钟作比较。在 systemd 主机上,timedatectl status 会报告时钟设置和同步状态。

如果主机时钟也不对,就检查它的时间同步,并在适用时检查虚拟机的时钟配置。单凭一条不合理的日志日期,不足以判定硬件时钟电池失效。

如果主机时钟正确,请确认文件是最新的且属于该实例。检查轮转归档、远程收集器以及查看工具中的时间戳转换。

还要区分事务时间戳与收集器收到该行的时间。普通访问日志在请求完成时记录,而守护进程日志可能异步写入。长时间运行的请求或隧道不必出现在其初始连接时刻。

相关文章