我将尝试解释我想要实现的目标。我有grok模式来匹配简单的日志行。日志行中有响应消息json主体,我可以使用自定义regex模式对其进行解析,并且我在kibana仪表板中看到了它。问题是我想从身体本身提取一些数据。
以下是工作grok模式:
{TIMESTAMP_ISO8601:timestamp}%{SPACE}*%{LOGLEVEL:level}:%{SPACE}*%{DATA}%{BODY:body}
BODY:的自定义图案
BODY (Body:.* {.*})
我看到它是用grok调试器解析的:
{
"timestamp": "2022-11-04 17:09:28.052",
"level": "INFO",
"body": {"status":200,"page":1, "fieldToBeParsed":12 .....//more json conten}
}
有没有什么方法可以将正文的一些内容与整个正文一起解析。所以我可以得到类似的结果:
{
"timestamp": "2022-11-04 17:09:28.052",
"level": "INFO",
"body": {"status":200,"page":1, "fieldToBeParsed":12 .....//more json conten},
"parsedFromBody: 12
}
示例:
{TIMESTAMP_ISO8601:timestamp}%{SPACE}*%{LOGLEVEL:level}:%{SPACE}*%{DATA}%{BODY:body}%
{FROMBODY:frombody}%
谢谢!
使用grok解析字段后,可以使用第二个grok过滤器来解析第一个grok创建的字段。不要试图同时做这两件事,它可能起作用,也可能不起作用。匹配项是一个散列,Java散列没有排序。
grok { match => { "body" => "fieldToBeParsed":%{NUMBER:someField:int}" } }