首页 > 解决方案 > 使用流利的 JSON 解析器的多种时间格式

问题描述

我目前正在阅读容器日志作为我在 fluentd 中的源,并且我正在解析我们所有的 JSON 格式的日志文件。JSON 解析器根据我们的配置按预期工作,但问题在于时间格式。根据日志文件,有多种时间格式。

例如,一个日志文件可能将时间存储为 2020-05-28T21:00:07Z,但另一个日志文件将其存储为 2020-04-28T20:07:52.013557931Z。在所有情况下,时间都存储在一个名为“time”的键中,因此默认情况下 fluentd 会尝试解析该键。

是否可以使用相同的过滤器来解析所有 JSON 数据但让它处理多种时间格式?我们是否需要为每种不同的时间格式创建不同的过滤器?

标签: jsonrubyloggingcontainersfluentd

解决方案


这更像是一个“流利”的问题,而不是一个直接的“Ruby”问题。

但是,对于您关于过滤器的具体问题,一般来说,仅根据值无法判断具体的日期格式。例如,“2020-03-04”是指 3 月 4 日 (yyyy-MM-dd) 还是 4 月 3 日 (yyyy-dd-MM)?不幸的是,没有办法仅从价值观来判断。

最好的做法通常是验证每个来源的格式(通过阅读该来源的文档或其他方式),并确保可以使用识别信息将日期值与来源联系起来。否则,fluentd 和任何其他程序都无法确定现在是什么时间(尽管您可以在某些情况下使用技巧来确定不是什么时间。)


推荐阅读