来自行的 Grok 模式 - 自定义日期

Grok pattern from line - custom date

我正在尝试使用 grok 模式从以下内容中获取字段。有什么帮助,尤其是自定义日期吗?

0E7 10JUN21 23:37:53.8 赛道 1 EZ:100 EX:72 速度:36 mph

我需要获取字段;

“日期” “时间” “轨道 1” “易” “前任” “速度”

我尝试获取日期模式,但没有成功

您需要一个自定义 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 并从中提取 datetime 并进行转换以解析数据,您将需要以下配置。

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。