0

例子:

信息:2014-10-28T22:39:46.593Z - 信息:尝试处理命令时发生错误:PlaceMarketOrderCommand,xkkdAAG​​Ril。错误:现金不足 #userId=5 #orderId=Y5545

图案:

> %{LOGLEVEL:stream_level}: %{TIMESTAMP_ISO8601:timestamp} -
> %{LOGLEVEL:log_level}: %{MESSAGE:message}
> (#userId=%{USER_ID:user_id})? (#orderId=%{ORDER_ID:order_id})?

使用的额外模式:

USER_ID (\d+|None)
ORDER_ID .*
ORDER_ID_HASH \s*(#orderId=%{ORDER_ID:order_id})?
USER_ID_HASH \s*(#userId=%{USER_ID:user_id})?
MESSAGE (.*?)

工作正常:删除可选的最后一个 orderId 也可以

信息:2014-10-28T22:39:46.593Z - 信息:尝试处理命令时发生错误:PlaceMarketOrderCommand,xkkdAAG​​Ril。错误:现金不足#userId=5

但是如果我保留 orderId 并删除 userId,那么我会得到“不匹配”

信息:2014-10-28T22:39:46.593Z - 信息:尝试处理命令时发生错误:PlaceMarketOrderCommand,xkkdAAG​​Ril。错误:现金不足 #orderId=Y5545

user_id 组也以 ? 作为可选组..

在 heroku 中使用grok 调试器

这是一个错误吗?(logstash 1.4.2)缺少正则表达式的东西?(更有可能......但是什么?)

我查看了grok 正在使用的正则表达式库,并且看起来这种语法应该可以工作。它适用于最后一组(orderId),但不适用于前一组。

谢谢您的帮助!

4

1 回答 1

1

您正在强制在您的可选最后一个空格之前...您需要这样做?

%{LOGLEVEL:stream_level}: %{TIMESTAMP_ISO8601:timestamp} -> %{LOGLEVEL:log_level}: %{MESSAGE:message} ?(#userId=%{USER_ID:user_id})? ?(#orderId=%{ORDER_ID:order_id})?
于 2014-10-29T13:07:15.423 回答