【问题标题】:Multiple time formats using fluentd JSON parser使用流利的 JSON 解析器的多种时间格式
【发布时间】:2020-09-16 08:33:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: json ruby logging containers fluentd


    【解决方案1】:

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

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

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

    【讨论】:

    • 如果文件中有足够的数据样本,则可以判断格式是什么,但需要进行飞行前检查以查找日期字段超出月份范围的日期。但是,这也可能太慢了。正如您所说,最好的做法是阅读文档或询问文件的来源。有时仅仅知道发送数据的人的位置就足以做出有根据的猜测。
    猜你喜欢
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2013-07-17
    • 2020-09-14
    相关资源
    最近更新 更多