Regex Logstash赢得';即使使用(?m)也不能使用我的多行

Regex Logstash赢得';即使使用(?m)也不能使用我的多行,regex,logstash,logstash-grok,grok,Regex,Logstash,Logstash Grok,Grok,因此,我从Cisco路由器收到以下日志消息: Apr 15 10:51:26.824: %CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed connection id=777, sequence number=218932 Apr 15 11:00:03.261: %CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed connection id=777, seque

因此,我从Cisco路由器收到以下日志消息:

Apr 15 10:51:26.824: %CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed
    connection id=777, sequence number=218932

Apr 15 11:00:03.261: %CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed
    connection id=777, sequence number=231456

Apr 15 11:05:00.525: %CRYPTO-4-PKT_REPLAY_ERR: decrypt: replay check failed
    connection id=789, sequence number=6509
Grok解析该位,直到\r\n刚刚好,但在它生成一个新条目时解析失败。我在正则表达式前面有(?m),在我更新到logstash 1.5.5之前,它曾经工作过


我发现真正奇怪的是,即使在开头使用(?m),或在结尾使用
(?(.|\r |\n)*)
,我也无法使它与整个事物匹配。在rubular.com上,两者都可以正常工作,但在grokconstructor和我的配置中,它们都在新行停止匹配。

在配置中尝试使用:

  • 多行过滤器()
  • 多行编解码器( 更新#1: 多行{ 模式=>“^%{CISCOTAG}.*” 否定=>“真” 什么=>“以前的” 定期刷新=>false
    }

每当一行以与%{CISCOTAG}模式匹配的文本开头时(例如Apr,…),这将启动一个新的日志事件。所有其他行(例如以空格开头的行)将附加到上一个事件。

您不需要
(?m)
,您需要
(?[\s]+)
。您的意图是什么?我怀疑匹配整个日志是您所需要的。grokconstructor仍然不匹配,然后尝试使用正则表达式解决它。grokconstructor配置为仅解析单独的行。尝试这一点会有问题,因为我有一些便宜的交换机发送没有时间戳的系统日志。这就是原因(+高CPU使用率)我告诉Wiktor我想用正则表达式来解决这个问题。@Oxygen:你的意思是你的日志格式因交换机型号而异?如果是这种情况,你很可能会调整多行模式。你能详细说明你需要匹配的格式类型吗?什么是高CPU使用率?格式粘贴在原始帖子中。模式是:timestamp:%ciscotag:greedydata的高CPU使用率我的意思是它不会低于50%的使用率。大部分时间都接近100%。谢谢。我会尝试一下。可能只有在有时间戳的情况下,我才会接受新事件。@Oxygen:嗨,如果有帮助,请接受我的答案:-)