![](/img/trans.png)
[英]Why doesn't ? work as an optional repetition specifier in this pattern?
[英]grok parse optional field pattern doesn't work
我有这样的日志:
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
]
]
}
谁能建议一种解决方案,为两种日志提供正确的输出?
由于您使用GREEDYDATA
因此它会尽可能多地“吃掉”它以填充errormessage
。
我对GROK的了解还不足以告诉您有哪些替代定义的模式,但是您应该能够使用自定义模式:
ERROR_MESSAGE:(?<errorMassage>.*?),THROTTLED_OUT_REASON:%{GREEDYDATA:throttledOutReason}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.