自定义grok模式中的Regex组



我正试图创建自定义的grok模式来使用logstash提取各种数据,并且正在绞尽脑汁地从日志行中提取regex group 1等效项的语法。在过去的两天里,我看了很多关于这方面的线索,但没有什么符合我的例子,而且没有一个罐装的grok模式看起来能达到我需要的价值。

3个示例日志文件行看起来与此类似(示例中使用缩写数据(:

2022-04-07 12:52:06,184:INFO   :Thread-70_SCHEDULE.0001: MsgID=63759111848731967
2022-04-07 07:23:39,876:INFO   :Thread-53_OrderInterfaceIntServer: MsgID=21316889724753182|
07:23:40,482 INFO  [stdout] (http-/0.0.0.0:8080-20) 2022-04-07 07:23:40,482:ERROR

我想创建一个名为SERVICE的自定义grok模式,它使用正则表达式匹配字符串提取模式匹配:

Thread-[0-9]{2}_(.*?):

对于3行将返回:

  • 附表0001
  • OrderInterfaceIntServer
  • "quot

在日志中:

  • SERVICE将始终以";线程xx_"其中xx=后跟下划线的2位数。有些日志可能根本没有这种模式(如第3行(。在这种情况下,没有对手
  • SERVICE后面总是跟一个冒号

在grok中,我可以用两种方式定义它:

SERVICE Thread-[0-9]{2}_(.*?):
or as a field using (?<service>Thread-[0-9]{2}_(.*?):)

但是,对于第1行,我得到的响应值为:

{
"service": [
[
"Thread-70_SCHEDULE.0001:"
]
]
}

我想要的是:

{
"service": [
[
"SCHEDULE.0001"
]
]
}

这相当于regex组1的响应。我不知道如何管理grok模式以获得我需要的结果。

您不必将所有模式都包含在捕获组中。你可以使用

grok { match => { "message" => "Thread-[0-9]{2}_(?<service>.*?):" } }

这将导致

"service" => "SCHEDULE.0001",
"service" => "OrderInterfaceIntServer",

和一个"_grokparsefailure";标记。

相关内容

  • 没有找到相关文章

最新更新