我有这样的日志:
ERROR_MESSAGE:Invalid Credentials,THROTTLED_OUT_REASON:API_LIMIT_EXCEEDED
我正在尝试使用grok调试器与grok进行解析:
ERROR_MESSAGE:%{GREEDYDATA:errorMassage},THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason}
它可以工作,但是有时日志中没有THROTTLED_OUT_REASON
字段。
ERROR_MESSAGE:%{GREEDYDATA:errorMassage}
在这种情况下,我尝试使用以下代码,因为THROTTLED_OUT_REASON
是可选字段。
ERROR_MESSAGE:%{GREEDYDATA:errorMassage}(,THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason})?
因此这对两种情况都适用。具有可选字段的日志的给定输出为:
{
"errorMassage": [
[
"Invalid Credentials,THROTTLED_OUT_REASON:API_LIMIT_EXCEEDED"
]
],
"throttledOutReason": [
[
null
]
]
}
但是带有可选字段的日志的预期输出:
{
"errorMassage": [
[
"Invalid Credentials"
]
],
"throttledOutReason": [
[
"API_LIMIT_EXCEEDED"
]
]
}
没有可选字段的日志的预期输出:
{
"errorMassage": [
[
"Invalid Credentials"
]
],
"throttledOutReason": [
[
null
]
]
}
任何人都可以提出一种可以为两种日志提供正确输出的解决方案吗?
答案 0 :(得分:1)
自从您使用GREEDYDATA
以来,它就“尽其所能”地填充errormessage
。
我对GROK的了解还不足以告诉您有哪些替代定义的模式,但是您应该能够使用自定义模式:
ERROR_MESSAGE:(?<errorMassage>.*?),THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason}
答案 1 :(得分:1)