我正在尝试创建自定义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行,将返回:
- SCHEDULE.0001
- 订单接口IntServer
- ““
在日志中:
- SERVICE将始终以“Thread-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模式来获得我需要的结果。
1条答案
按热度按时间h6my8fg21#
您不需要在撷取群组中包含所有的样式。您可以使用
这将导致
和第三个事件上的“_grokparsefailure”标记。