Java

用於 Java 堆棧跟踪的 Logstash 多行編解碼器

  • March 17, 2017

logstash 文件表明您可以使用多行編解碼器將 Java 堆棧跟踪日誌條目中的多個縮進行折疊成單個事件:

https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html

input {
  syslog {
      type => syslog
      port => 8514
      codec => multiline {
           pattern => "^\s"
           what => "previous"
      }
 }
}

這是基於 logstash 在行首找到一個縮進並將其與上一行結合起來的。

但是,logstash 文件是我唯一可以找到參考的地方。一般使用者社區似乎正在使用精心製作的 grok 過濾器來達到相同的效果。

我已經嘗試過logstash提供的基本縮進模式,但它不起作用。有沒有其他人通過匹配縮進模式來實現這個工作?

是的,儘管沒有syslog {}輸入。我已經使用file {}輸入和 Tomcat 日誌完成了它。如果堆棧跟踪進入系統日誌,每行都有一個新事件,並且仍然具有通常的系統日誌前綴 datestamp 等,那麼將它們重新組合成一個單一的堆棧轉儲變得更加困難。它仍然可以完成,但需要更廣泛的過濾器。

  1. 輸入編解碼器不是多行的;在每行事件的情況下,多行編解碼器無法處理它。
  2. Grok 過濾器將 syslog 消息拆分為多個部分,將 SYSLOGMESSAGE 部分放入其自己的欄位中。
  3. 使用multiline {}SYSLOGMESSAGE 欄位上的過濾器重新組裝您的堆棧轉儲。
  4. 使用一個且只有一個 filter-worker(-w標誌),這是確保收集整個堆棧跟踪的唯一方法。

如果可能的話,最好使用堆棧跟踪發送file {}到的文件上的編解碼器,並使用您已經找到的縮進方法。

引用自:https://serverfault.com/questions/838654