【问题标题】:what is the regexp pattern for multiline (logstash)什么是多行(logstash)的正则表达式模式
【发布时间】:2014-06-18 13:22:43
【问题描述】:

目前我有:

multiline {
 type => "tomcat"
 pattern => "(^.+Exception: .+)|(^\s+at .+)|(^\s+... \d+ more)|(^\s*Caused by:.+)|(---)"
 what => "previous"
}

这是我日志的一部分:

TP-xxxxxxxxxxxxxxxxxxxxxxxx: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
    at xxxxxx
Caused by: xxxxxxxxx
    at xxxxxx
Caused by: xxxxxxxxx   
--- The error occurred in xxxxxxxxx.  
--- The error occurred xxxxxxxxxx.  

我的模式在这里不起作用。可能是因为我在末尾添加了(---)。添加 --- 行的正确正则表达式是什么?

谢谢

【问题讨论】:

    标签: regex tomcat stack-trace multiline logstash


    【解决方案1】:

    您还需要考虑该行中的其他字符:

    (^---.*$)
    

    【讨论】:

    • 试过了,还是不行。还尝试了 (^.---.+) 和 (^\-\-\-.*) 以及介于两者之间的所有内容。我也找不到告诉我错误所在的 logstash 日志。
    • (^---.+) 怎么样?此外,如果您从原始配置中删除 (---),该表达式是否适用于您希望它拾取的其他行?
    • 如果我删除 (---) 它工作正常。 (除了 -- 行 :-P)。也尝试过 (^---.+) 但没有奏效。
    • 这有点牵强,但也许可以尝试直接从日志中复制“-”字符并将其粘贴到正则表达式中?也许日志中的连字符与正则表达式中的编码不同。带有连字符的行的开头是否有空格?也试试(^\s*---.*)
    • @user3752671 这方面有什么运气或进展吗?
    【解决方案2】:

    我已将您的正则表达式和文本放入这些在线正则表达式好友中,并尝试了 Eric 的建议:

    有时这些在线好友确实有助于理清思路。这张图片显示了识别的内容:

    如果我坚持这一点,我就不会再关注正则表达式本身了。相反,我会检查以下几点:

    • 由于有不同的正则表达式方言,logstash 使用什么方言?这对我的模式意味着什么?
    • 是否有任何未设置但需要设置的特定于 logstash 的修饰符?
    • 正如 Ben 提到的,还有更多过滤工具。改用grok 会有帮助吗?

    【讨论】:

      【解决方案3】:

      如果一个日志事件以时间戳或特定单词开头,例如,在您的日志中,如果所有日志都以 TP 开头,那么您可以将其用作过滤模式。

          multiline {
                  pattern => "^TP"
                  what => "previous"
                  negate => true
          }
      

      使用此过滤器,您可以轻松地多行日志,无需使用复杂的模式。

      【讨论】:

      • 有时是^TP。有时是 [卸载,有时是 log4j: 。尝试像这样 "^TP|^[Unloading|^log4j:" 但不工作
      • 我想你误解了它。模式“^TP”意味着所有的日志开始都是“TP”。 “^”表示正则表达式中的一行开始。所以,你的日志,“TPXXXXXXXX”,所有的日志都可以由logstash处理。您可以尝试修改所有以“TP”开头的日志。然后再试一次。 :)
      猜你喜欢
      • 2014-11-18
      • 2015-07-21
      • 2013-08-21
      • 2011-06-15
      • 2021-07-16
      • 1970-01-01
      • 2015-06-09
      相关资源
      最近更新 更多