使用fluentd JSON解析器的多种时间格式

使用fluentd JSON解析器的多种时间格式,json,ruby,logging,containers,fluentd,Json,Ruby,Logging,Containers,Fluentd,我目前正在fluentd中读取容器日志作为我的源代码,并解析所有JSON格式的日志文件。根据我们的配置,JSON解析器可以正常工作,但问题是时间格式。根据日志文件的不同,有多种时间格式 例如,一个日志文件可能将时间存储为2020-05-28T21:00:07Z,但另一个日志文件将时间存储为2020-04-28T20:07:52.013557931Z。在所有情况下,时间也存储在名为time的键中,因此默认情况下fluentd会尝试解析该键 是否可以使用相同的过滤器解析所有JSON数据,但让它处理多

我目前正在fluentd中读取容器日志作为我的源代码,并解析所有JSON格式的日志文件。根据我们的配置,JSON解析器可以正常工作,但问题是时间格式。根据日志文件的不同,有多种时间格式

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


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

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

但是,对于您关于过滤器的特定问题,一般来说,仅根据值无法确定特定的日期格式。例如,“2020-03-04”是指3月4日yyyy-MM-dd,还是4月3日yyyy-dd-MM?不幸的是,仅仅从价值观是无法区分的


最好的做法通常是通过阅读每个源的文档或其他方式来验证每个源的格式,并确保可以使用标识信息将日期值绑定回源。如果没有这一点,fluentd或任何其他程序都无法确定现在是什么时间,尽管在某些情况下,您可以使用一些技巧来确定现在不是什么时间。

如果文件中有足够的数据样本,就可以知道格式是什么,但需要进行飞行前检查,查找日期字段超出当月范围的日期。但是,这也可能太慢了。正如您所说,最好的做法是阅读文档或询问文件的来源。有时,仅仅知道发送数据的人的位置就足以做出有根据的猜测。