【发布时间】: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
此时您可能已经掌握了一些东西:
- 我有 2 个问题:中间的“T”字符和秒后的精度(有 6 个数字,而不是只有 3 个 (\d{4}-\d{2}-\d{2 }T\d{2}:\d{2}:\d{2}.\d{6}))
- 我完全迷失了,此时我只是在猜测随机组合
好的但有缺陷的解决方案
“OK”解决方案是使用“灵活日期”转换器,但是如果我这样做,我将失去秒后的精度(第 1 点中提到的那 6 个小数)。
不幸的是,我的系统需要这样的精度,所以我不能只去掉最后 6 位小数。
问题
- 如何修复我的转换器,使其能够以我需要的精度正确覆盖时间戳?
【问题讨论】:
-
根据: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 似乎并非如此。在整个文档中,最精确的单位只有毫秒。