我正试图使用grok模式从以下内容中获取字段。有什么帮助吗,尤其是在自定义日期方面?
0E7 6月21日10日23:37:53.8轨道1 EZ:100 EX:72速度:36 mph
我需要得到田地;
"日期";"时间";"轨道1";"EZ";"EX";"速度";
我试着得到日期模式,但没有运气
您需要一个自定义的grok来获取分隔字段中的日期、月份和年份,然后您需要将月份字段大写,然后添加一个带有完整日期字符串的新字段以用于日期过滤器。
要将日期10JUN21
解析为单独的字段,可以使用自定义grok模式。
(?<day>[0-9]{2})(?<month>[A-Z]{3})(?<year>[0-9]{2})
因此,考虑到消息0E7 10JUN21 23:37:53.8 Track 1 EZ: 100 EX: 72 Speed: 36 mph
,并从中提取date
和time
,并进行转换以解析数据,您将需要以下配置。
filter {
grok {
match => {
"message" => "0E7 (?<day>[0-9]{2})(?<month>[A-Z]{3})(?<year>[0-9]{2}) %{TIME:time} %{GREEDYDATA}"
}
}
mutate {
capitalize => ["month"]
add_field => { "datestring" => "%{month} %{day} %{year} %{time}"}
}
date {
match => ["datestring", "MMM dd yy HH:mm:ss.S"]
remove_field => ["day","month","year","time"]
}
}
这将给您以下结果:
{
"@timestamp" => 2021-06-11T02:37:53.800Z,
"message" => "0E7 10JUN21 23:37:53.8 Track 1 EZ: 100 EX: 72 Speed: 36 mph",
"datestring" => "Jun 10 21 23:37:53.8"
}
如您所见,@timestamp
字段具有日期字符串的值,但相对于UTC
,因为@timestamp
字段使用UTC。