elasticsearch logstash中对多个已定义模式的Grok过滤
我正在尝试筛选与我的一些模式匹配的日志。e、 g:elasticsearch logstash中对多个已定义模式的Grok过滤,elasticsearch,logstash,logstash-grok,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/vincity/dholland\u view\u sql\u bran/IN/Cluster\u Node/Sample/vr1.log 现在,我想从一堆日志中gr
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/vincity/dholland\u view\u sql\u bran/IN/Cluster\u Node/Sample/vr1.log
现在,我想从一堆日志中grep这3条路径:基本上,我想提取的模式是包含“vincinity”“sql”和“IN”的日志,因此对于regex,它将是简单的*vincinity*sql*IN*
我试过这个grok过滤器:
grok {
match => { "Vinc" => "%{URIPATHPARAM:*vincinity*sql*IN*}" }
}
然后我在kibana得到了grokparsefailure——我是grok的新手,所以也许我没有正确地处理这个问题
grok模式的语法是%{syntax:SEMANTIC}
grok过滤器的工作方式是
grok {
match => {
"message" => "%{PATTERN:named_capture}"
}
}
其中,message
是要解析的字段,这是大多数输入将未解析的日志线放在其中的默认字段
URIPATHPARAM
模式是通过名为Onigurama的正则表达式语言实现的。它可能会匹配您的整个日志消息,但不会为您捕获其中的某些部分
有关构造grok模式的帮助,请查看,他们链接到两个有用的模式构造工具。在grok块中使用的正确格式是:
(?<field_name>the pattern here)
将其保存在/patterns
目录中,然后按以下方式使用:
grok {
patterns_dir => "./patterns"
match => ["message" , "%{MYPATH_MUST_BE_UPPERCAS:path}"]
}
就你而言:
(?<vincinity>(?>/\s*.*?vincinity.*?\s*)+)
(?<sql>(?>/\s*.*?sql.*?/\s*)+)
(?<in>(?>\s*.*?(IN).*?\s*)+)
(?(?>/\s*?vincinity.*?\s*)+)
(?(?>/\s*?sql.*/\s*)+)
(?(?>\s*?(英寸)。*?\s*)+)
这是有用的,但是我得到了_grokParseeException检查您的正则表达式在表达式中不应该有任何新行(\n或enter)现在这很奇怪正则表达式正在筛选,但不在。*Vincity.*sql.*in.*您的表达式已关闭<代码>(?*?vincinity.*?sql.*?IN.*)可能适合您。*?
构造是*
的非贪婪等价物,因此应该使其性能更好。更少的子字符串搜索。
(?<vincinity>(?>/\s*.*?vincinity.*?\s*)+)
(?<sql>(?>/\s*.*?sql.*?/\s*)+)
(?<in>(?>\s*.*?(IN).*?\s*)+)