【问题标题】:Extract timestamp from message with Graylog extractor使用 Graylog 提取器从消息中提取时间戳
【发布时间】:2023-03-22 21:04:01
【问题描述】:

背景

我正在尝试覆盖默认时间戳 Graylog 将消息分配给消息本身中写入的时间戳。

为了实现这一点,我阅读了官方文档:

https://docs.graylog.org/en/3.3/pages/extractors.html#the-standard-date-converter

但是我仍然无法正确设置时间戳。

消息

大部分消息的开头如下:

2021-02-14T06:07:58.521009+00:00 myApp00_rest_of_log

还有其他类型的消息不符合此标准,但这是后者。

为了从消息中提取时间戳,我创建了以下提取器:

RegEx 很好地完成了它的工作,但是正在扼杀它的是转换器。

问题

如您所见,我正在使用转换器:

yyyy-MM-ddTHH:mm:ss.S

这不起作用。我还尝试了以下变体:

yyyy-MM-dd'T'HH:mm:ss.S
yyyy-MM-dd HH:mm:ss.S
yyyy-MM-dd'T'HH:mm:ss.SSSSSS
yyyy-MM-dd HH:mm:ss.SSSSSS
yyyy-MM-ddTHH:mm:ss.SSSSSS

此时您可能已经掌握了一些东西:

  1. 我有 2 个问题:中间的“T”字符和秒后的精度(有 6 个数字,而不是只有 3 个 (\d{4}-\d{2}-\d{2 }T\d{2}:\d{2}:\d{2}.\d{6}))
  2. 我完全迷失了,此时我只是在猜测随机组合

好的但有缺陷的解决方案

“OK”解决方案是使用“灵活日期”转换器,但是如果我这样做,我将失去秒后的精度(第 1 点中提到的那 6 个小数)。

不幸的是,我的系统需要这样的精度,所以我不能只去掉最后 6 位小数。

问题

  1. 如何修复我的转换器,使其能够以我需要的精度正确覆盖时间戳?

【问题讨论】:

  • 根据:stackoverflow.com/questions/19223171/… 转换器yyyy-MM-dd'T'HH:mm:ss.SSSSSS 应该可以工作。但是我在 Graylog 中遇到了更多错误:java.lang.IllegalArgumentException: Invalid format: "2021-02-14T04:20:10.419248" is malformed at "248"
  • 当然yyyy-MM-dd'T'HH:mm:ss.SSSSSS 不起作用。在官方文档中写道,S 是一秒的一小部分,也以毫秒为单位。它写在演示栏中。使用标准日期转换器似乎无法达到微秒精度。
  • @PetrFiedler 有没有办法在 Graylog 中实现微秒级精度?有办法吗?
  • @Flame_pheonix 似乎并非如此。在整个文档中,最精确的单位只有毫秒。

标签: date datetime graylog


【解决方案1】:

回答

在撰写本文时,Graylog 不支持时间戳中的微秒精度。

这主要是因为 Graylog 使用了 org.joda.time.DateTime 库,它不支持时间戳的微秒精度。

目前有一个拉取请求来尝试解决这个问题:

https://github.com/Graylog2/graylog2-server/pull/9642

但目前还不清楚这实际上会在哪个版本的 Graylog 中发布。

有关该发现的更多信息,请随时查看发现该发现的官方论坛:

https://community.graylog.org/t/extract-timestamp-from-message/18819/4?u=fl4m3ph03n1x

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2019-08-18
    • 2015-01-10
    • 2016-08-10
    • 2017-03-09
    • 1970-01-01
    • 2017-01-15
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多