我编写了一个grok模式,以便将一大块消息放到一个字段中。现在我想用不同的方法从这个字段中提取数据。
First Grok:
grok {
match => { "message" => "%{WORD:ThreadNo}: %{NOTSPACE:tNumber}, %{GREEDYDATA:Info}" }
}在Info字段中,我捕获了一个原始数据,即
"tNumber" => "t@-1686439616",
"ThreadNo" => "3",
"Info" => "<Start Stack Trace> <1 - ADK Verbose Trace Entry> stateless dispatch for invokeClass.bosInterface executing Active: 1 minute 49.00 seconds User: s-plmv6intp Tenant: Session: 2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84) Parameters: bosContext _cntx: user: User Agent depth: 2 session id: 2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84) bosStringList _params: 2 entries $$MXRIP$$java.util.HashMap 6 uint8 _local: 1",现在,如果我想编写另一个grok,从信息字段提取数据。我怎么能做到这一点。谢谢。
发布于 2021-03-11 16:35:29
如果您想使用第二个grok,那么使用第二个grok过滤器。不要尝试在单个筛选器中同时执行两个匹配。从理论上讲,这是支持的,但很容易弄错。以下配置
input { generator { count => 1 lines => [ 't@-1686439616: 3, <Start Stack Trace> <1 - ADK Verbose Trace Entry> stateless dispatch for invokeClass.bosInterface executing Active: 1 minute 49.00 seconds User: s-plmv6intp Tenant: Session: 2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84) Parameters: bosContext _cntx: user: User Agent depth: 2 session id: 2FF1BFBFCC010E7815678741BB95907F:mx115420087975768b5:(WebServiceFacade.java:84) bosStringList _params: 2 entries $$MXRIP$$java.util.HashMap 6 uint8 _local: 1' ] } }
filter {
grok { match => { "message" => "%{WORD:ThreadNo}: %{NOTSPACE:tNumber}, %{GREEDYDATA:Info}" } }
grok { match => { "Info" => "((.|\r|\n)*)Active: %{GREEDYDATA:Active}\s*User:\s*%{USER:UserInfo}" } }
}
output { stdout { codec => rubydebug { metadata => false } } }结果:
"ThreadNo" => "1686439616",
"tNumber" => "3",
"UserInfo" => "s-plmv6intp",
"Active" => "1 minute 49.00 seconds "等。
https://stackoverflow.com/questions/66559731
复制相似问题