Logstash / GROK:解析日志文件时创建自定义变量

时间:2017-09-20 10:43:21

标签: parsing elasticsearch logstash-grok grok

我是Grok的新手,虽然我已经设法在logstash配置文件中创建自定义正则表达式并编写GROK过滤器。我的问题如下:

消息来源 -  我正在解析一个日志文件,其中,每个事件都包含一个'source'字段,这是日志文件的名称,例如:

test.YYYYMMDD_HHMMSS.log

我想要做的是:对于每个事件,'source'包含此文件名,在Grok过滤器的新字段中以下列格式提取日期和时间:

DD/MM/YYYY HH:MM:SS

我知道如何在GROK中编写自定义正则表达式(RE),但在将其存储到变量之前,我无法编写与数据格式相匹配的RE。这就是我的问题。

有人可以帮忙吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

从文件名中提取日期应该有效。您应该能够将源字段中的日期部分与grok过滤器匹配,并添加一个新字段,如下所示:

filter { 
    grok {
        match => [
        "source", "test.%{YEAR:year}%{MONTHNUM2:month}%{DATA:day}_%{HOUR:hour}%{MINUTE:minute}%{SECOND:second}.log"
        ]
    }
    mutate { add_field => { "your_new_date_field" => "%{day}/%{month}/%{year} %{hour}:%{minute}:%{second}" } }
}

我现在没有可能对此进行测试,但我希望你明白这一点。

此解决方案将创建许多其他字段,如年,月,日等。如果您想删除其他字段,可以使用metadata fields