繁体   English   中英

Logstash中的Grok过滤以定义多个模式

[英]Grok filtering in logstash for multiple defined patterns

我正在尝试过滤与我所拥有的几种模式匹配的日志。 例如:

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

现在,我想从一堆日志中复制这3条路径:基本上,我要提取的模式是包含“ vincinity”,“ sql”和“ IN”的日志,因此使用正则表达式将仅仅是*vincinity*sql*IN*尝试了这个grok过滤器:

grok {

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

  }

然后我在kibana中得到_grokparsefailure-我是grok的新手,所以也许我没有正确地解决这个问题。

grok过滤器文档中

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

grok过滤器的工作方式是

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

其中message是要解析的字段,这是大多数输入将未解析的日志行放入其中的默认字段。

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

为了帮助构建grok模式,请查看docs ,它们链接到几个有用的模式构建工具。

在grok块中使用自定义模式的正确格式为:

(?<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*)+)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM