阿里云sls采集日志时间插件配置问题

1.背景信息

  目前我们在使用阿里云 SLS 服务,涉及多个环境(如 debug 和 prod)。我们分别收集了 higress 的 stdout 输出日志和业务日志,存储在不同的 logstore 中:debug-cn-xx-higress 和 debug-cn-xx-podlog。问题在于 higress 日志时间戳无法修改,默认是零时区(UTC),而 podlog 的业务日志时间戳是东八区(北京时间)。当时间解析插件设置为 GMT+8 时,higress 日志会出现查询不到的情况,必须往回查找 8 小时才能匹配到,而 podlog 日志则正常显示。

  下面列出涉及的几个时间点,并附上相应位置的截图: 

  (以下仅展示某一类别的日志或配置示例)

  1.higress或业务日志时间

  2.logtail时间

  该时间在阿里云logtail daemon里面获取,时间是零时区

  

  3.容器时间

  绑定本机,也是CST

  4.时间解析插件时区

  

  5.sls查询时间

  这里还是用一个表格来表示。

产品 higress pod log
日志源 零时区 北京时间
logtail时间 零时区 零时区
容器时间 北京时间 北京时间
时间解析插件时区 不设置 GMT+8
sls查询时间 北京时间 北京时间

  如果在 Higress 的时间解析插件中设置 GMT+8,日志将在当前 SLS 查询界面无法显示。只有按照上表中的设置,才能在当前时间正确查看日志。

 

2.原因

  经过多方联系阿里云,最终确认了日志时间转换的流程。对于 Unix 时间戳,无需额外调整时区。如果 Logtail 采集的日志时间与实际日志时间一致,那么直接使用采集到的时间戳就可以,不需要进一步的时区调整。

  然而,如果此时你在时间解析插件中配置了 GMT+8,就会出现问题。具体表现为,SLS 查看日志时,显示的时间会比预期提前 8 小时。这是因为 Unix 时间戳 本身是 UTC 时间戳,不包含时区信息。Logtail 获取到日志时间戳后,将其按照 UTC 计算,但如果在后续配置了 GMT+8 时区,logtail会认为获取到日志的时区是CST,导致在 SLS 显示时,时间被错位转换成了北京时间,且因为没有重新计算时区,最终导致显示的是提前 8 小时的时间。

  简单来说,Unix 时间戳 是 UTC 时间,它本身没有时区概念。如果你配置了 GMT+8,那么系统会直接认为获取的时间戳是 CST 时间,或者说,它会把获取到时间戳当作已经是 CST 时间来处理。

  所以出现下图中,采集时间是正常cst时间,所有时间全部是utc时间。

  如果不配置时间插件GMT+8,那么

  那么接下来说一下pod log为什么需要GMT+8才是正常。

  Pod 日志(即业务日志)的时间是 北京时间(CST),而 Logtail 默认是按照 UTC 时区 来采集日志的。因此,在 Logtail 的时间解析插件中必须配置 GMT+8,这样logtail才能知道自己处于什么时区。

  在实际操作中,Logtail 会先确认自己所在的时区,然后把获取到的原始日志时间字段转换为对应时区的时间戳。如果你配置了 GMT+8,那么 Logtail 会认为自己处于 CST(北京时间) 时区。它会获取 时间戳(时间戳没有时区概念) 后,直接把它当作 CST 时间戳 处理,最终产生的时间戳就是北京时间对应的时间戳。

  简单来说回higress时间,这里复习加深一下,如higress时间, 总结一句话,Logtail 获取时间时,会首先确认自己的时区,然后将原始时间字段转换为对应时区的时间戳。例如,Higress 明明是下午一点,配置了 GMT+8 后,时间还是保持在下午一点,原因是 Logtail 认为自己是 CST 时区,所以获取到的  时间戳 被直接当作 CST 时间 处理,最终影响了 SLS 查询界面 上的时间显示。

  所以最终,SLS 查询日志 的时间显示基本正常,都是 CST 时间,如下图所示。

  (以下为pod log截图)

  以上废话其实也可以不看,那是我的排错过程。总结一句话,Logtail 只需将时间转换为源头日志的时区,不要试图修改源头日志的时区。要么调整日志源头,要么与源头时区保持一致(即使是错误的)。例如,如果源头是 CST,那么配置 Logtail GMT+8,确保与源头日志的时区一致即可。

 

3.补充

  本来可以单独写一篇,但由于涉及到阿里云的日志问题,这里直接补充一下。需要注意的是,如果是 文件采集,可以在 Logtail 配置 中启用 多行采集。但如果是 标准输出(stdout) 方式采集,千万不要启用多行采集,否则会导致 时间解析失败 或者 日志解析失败

  见下图

 

 

posted @ 2025-04-15 11:45  小家电维修  阅读(89)  评论(0)    收藏  举报