问题描述
背景
我正在尝试覆盖默认时间戳 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
此时您可能已经了解了一些事情:
- 我有两个问题:中间的“T”字符和秒后的精度(有 6 个数字,而不仅仅是 3 个 (\d{4}-\d{2}-\d{2 }T\d{2}:\d{2}:\d{2}.\d{6}))
- 我完全迷失了,我现在只是在猜测随机组合
好的但有缺陷的解决方案
“好的”解决方案是使用“灵活日期”转换器,但是如果我这样做,我将失去秒后的精度(第 1 点中提到的 6 位小数)。
不幸的是,我的系统需要那么高的精度,所以我不能只去掉最后 6 位小数。
问题
- 如何修复我的转换器,使其能够以我需要的精度正确覆盖时间戳?
解决方法
答案
在撰写本文时,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