例子:
信息:2014-10-28T22:39:46.593Z - 信息:尝试处理命令时发生错误:PlaceMarketOrderCommand,xkkdAAGRil。错误:现金不足 #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,xkkdAAGRil。错误:现金不足#userId=5
但是如果我保留 orderId 并删除 userId,那么我会得到“不匹配”
信息:2014-10-28T22:39:46.593Z - 信息:尝试处理命令时发生错误:PlaceMarketOrderCommand,xkkdAAGRil。错误:现金不足 #orderId=Y5545
user_id 组也以 ? 作为可选组..
在 heroku 中使用grok 调试器:
这是一个错误吗?(logstash 1.4.2)缺少正则表达式的东西?(更有可能......但是什么?)
我查看了grok 正在使用的正则表达式库,并且看起来这种语法应该可以工作。它适用于最后一组(orderId),但不适用于前一组。
谢谢您的帮助!