在logstash中对多个已定义的模式进行Grok过滤

时间:2017-03-07 13:45:42

标签: elasticsearch logstash logstash-grok

我正在尝试按照我所拥有的几种模式过滤我的日志。 e.g:

E/vincinity/dholland_view_sql_global/IN/Cluster_Node/SSL-CACHE/Dsal1
F/vincinity/dholland_view_sql_local/IN/Cluster_Node3/SSL-CACHE/Dsal4

R / vincinity / dholland_view_sql_bran / IN / Cluster_Node /样品/ vr1.log

现在我想从一堆日志中查看这三个路径:基本上我要提取的模式是包含“vincinity”“sql”和“IN”的日志,所以使用正则表达式它只是*vincinity*sql*IN* 我试过这个grok过滤器:

grok {

    match => { "Vinc" => "%{URIPATHPARAM:*vincinity*sql*IN*}" }

  }

然后我在kibana得到_grokparsefailure - 我是grok的新手,所以也许我没有正确接近这个。

2 个答案:

答案 0 :(得分:0)

来自grok filter documentation

  

grok模式的语法是%{SYNTAX:SEMANTIC}

grok过滤器的工作方式是

grok {
  match => {
    "message" => "%{PATTERN:named_capture}"
  }
}

如果message是您要解析的字段,则这是大多数输入放置未分析日志的默认字段。

通过称为Onigurama的正则表达式语言,URIPATHPARAM模式是一个predefined in logstash。它可能与您的整个日志消息相匹配,但它不会为您捕获它的某些块。

有关构建grok模式的帮助,请查看docs,它们链接到一些有用的模式构建工具。

答案 1 :(得分:0)

在grok块中使用custom pattern的正确格式为:

(?<field_name>the pattern here)

或者您可以在单独的文件(my-pattern.txt)中定义自己的自定义模式(使用正则表达式),如下所示:

MYPATH_MUST_BE_UPPERCASE Regex_Pattern

将其保存在./patterns目录中,然后以这种方式使用它:

grok {
     patterns_dir => "./patterns"
     match => ["message" , "%{MYPATH_MUST_BE_UPPERCAS:path}"]
}

在你的情况下:

(?<vincinity>(?>/\s*.*?vincinity.*?\s*)+)
(?<sql>(?>/\s*.*?sql.*?/\s*)+)
(?<in>(?>\s*.*?(IN).*?\s*)+)