如何将确切单词后的字符串部分移至logstash中的另一个字段?

时间:2019-05-04 08:09:38

标签: logstash elastic-stack logstash-grok

假设我有如下日志文件:

My custom exception ST: java.lang.RuntimeException: Text of this dummy err.

我的最终目标是将ST:之后的所有内容放入新的字段ST中,并删除ST:

我正在尝试使用该模式,但是它不起作用。

filter {
  grok {
    match => { "message" => "(?<newField>(?<=ST)(?s)(.*$))" }
}

2 个答案:

答案 0 :(得分:0)

Grok是based on Oniguruma正则表达式库。要使.与任何带有Oniguruma regex的字符匹配,您需要传递(?m)内联修饰符,而不是(?s)(如PCRE和其他正则表达式引擎一样)。

通过将(?<=ST)正向超前放置在命名的捕获组中,您需要ST出现在当前位置之前,但是您必须在ST和冒号之后加上一个空间。 只需将ST:从命名组中移出即可

"(?m)ST: (?<newField>.*)"
 ^^^^^^^^

ST:和空格将被匹配并消耗,newField组将在其中保留其余字符串。

答案 1 :(得分:0)

您可以使用特定的正则表达式:

^My custom exception ST: %{GREEDYDATA:ST}

或更通用的一个:

%{GREEDYDATA} \bST\b: %{GREEDYDATA:ST}

始终尝试使用特定的正则表达式。