来自自定义 grok 模式的正则表达式组
Regex group from within custom grok pattern
我正在尝试创建自定义 grok 模式以使用 logstash 提取各种数据,并且正在绞尽脑汁让语法正确以从我的日志行中提取等价的正则表达式组 1。在过去的 2 天里,我查看了大量与此相关的主题,但没有一个符合我的示例,而且 none 罐装 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 行会 return:
- 附表.0001
- OrderInterfaceIntServer
- ""
在日志中:
- 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"
]
]
}
这相当于正则表达式组 1 的响应。我不知道如何管理 grok 模式以获得我需要的结果。
您不必在捕获组中包含所有模式。您可以使用
grok { match => { "message" => "Thread-[0-9]{2}_(?<service>.*?):" } }
这将导致
"service" => "SCHEDULE.0001",
"service" => "OrderInterfaceIntServer",
和第三个事件的“_grokparsefailure”标签。
我正在尝试创建自定义 grok 模式以使用 logstash 提取各种数据,并且正在绞尽脑汁让语法正确以从我的日志行中提取等价的正则表达式组 1。在过去的 2 天里,我查看了大量与此相关的主题,但没有一个符合我的示例,而且 none 罐装 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 行会 return:
- 附表.0001
- OrderInterfaceIntServer
- ""
在日志中:
- 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"
]
]
}
这相当于正则表达式组 1 的响应。我不知道如何管理 grok 模式以获得我需要的结果。
您不必在捕获组中包含所有模式。您可以使用
grok { match => { "message" => "Thread-[0-9]{2}_(?<service>.*?):" } }
这将导致
"service" => "SCHEDULE.0001",
"service" => "OrderInterfaceIntServer",
和第三个事件的“_grokparsefailure”标签。