使用 Graylog 提取器从消息中提取时间戳

问题描述

背景

我正在尝试覆盖认时间戳 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

还有其他类型的消息不符合此标准,但仅适用于后者。

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

extractor_screenshot

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. 我有两个问题:中间的“T”字符和秒后的精度(有 6 个数字,而不仅仅是 3 个 (\d{4}-\d{2}-\d{2 }T\d{2}:\d{2}:\d{2}.\d{6}))
  2. 我完全迷失了,我现在只是在猜测随机组合

好的但有缺陷的解决方

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

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

问题

  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