【发布时间】:2023-03-19 21:40:01
【问题描述】:
我编写了一个 grok 模式来将一大块消息放入一个字段中。现在我想用不同的 grok 从该字段中提取数据。
First Grok:
grok {
match => { "message" => "%{WORD:ThreadNo}: %{NOTSPACE:tNumber}, %{GREEDYDATA: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 来从 Info 字段中提取数据。我怎样才能做到这一点。 谢谢。
【问题讨论】:
-
有什么特别的理由不解析第一个 grok 中的所有内容吗?无论如何,添加另一个匹配“信息”字段的 grok 过滤器应该没问题
-
谢谢@glenacota。 Info 字段中的信息很大,并且因结果而异。因此,整个消息的单一 grok 并没有真正起作用。当您说为字段编写 grok 应该没问题时。我怎样才能做到这一点。
-
我试着把另一个 grok 像下面这样: match => { "Info" => "((.|\r|\n)*)Active: %{GREEDYDATA:Active}\s*用户:\s*%{USER:UserInfo}" }。这只是样品grok。但它不处理 Info 字段数据。
标签: logstash elastic-stack logstash-grok