2015-10-17 114 views
2

我有一個應用服務器(Ubuntu 14.04),它運行tomcat服務器。此同一應用程序服務器由配置爲將日誌發送到NXlog服務器(在Ubuntu 14.04上)的「rsyslog」服務器組成。多行日誌問題rsyslog

rsyslog服務器發送所有日誌,包括tomcat錯誤,異常&堆棧跟蹤到系統日誌服務器,但問題在於多行日誌。當日志消息存儲在文件中或未經任何封裝地通過網絡轉發時,跨越多行的消息中出現的換行符會混淆簡單的基於行的分析器,這些簡單的基於行的分析器將每行視爲單獨的事件; &因此我的異常日誌被換成新行。

我rsyslog現在的版本是:7.4.4

的rsyslog.conf文件看起來是這樣的:

################# 
#### MODULES #### 
################# 
$EscapeControlCharactersOnReceive off 
$LocalHostName nishant-app 

$ModLoad imuxsock # provides support for local system logging 
$ModLoad imklog # provides kernel logging support (previously done by rklogd)i 
#$ModLoad immark # provides --MARK-- message capability 
$ModLoad imfile 
$ModLoad omrelp 
#$ModLoad omhdfs 

# provides UDP syslog reception 
#$ModLoad imudp 
#$UDPServerRun 514 

# provides TCP syslog reception 
#$ModLoad imtcp 
#$InputTCPServerRun 514 

module(load="imfile" PollingInterval="10") 
########################### 
#### GLOBAL DIRECTIVES #### 
########################### 
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# 

# 
# Use traditional timestamp format. 
# To enable high precision timestamps, comment out the following line. 
# 
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat 

# Filter duplicated messages 
$RepeatedMsgReduction on 

# 
# Set the default permissions for all log files. 
# 
$FileOwner syslog 
$FileGroup adm 
$FileCreateMode 0640 
$DirCreateMode 0755 
$Umask 0022 
$PrivDropToUser syslog 
$PrivDropToGroup syslog 

# 
# Where to place spool files 
# 
$WorkDirectory /var/spool/rsyslog 

# 
# Include all config files in /etc/rsyslog.d/ 
# 
$IncludeConfig /etc/rsyslog.d/*.conf   ## This includes all the conf files which tells rsyslog which logs need to be sent 

所以基本上我需要發送tomcat的堆棧跟蹤&例外,使得例外不要分散在多行中。

  • 我期待解決這個在rsyslog結束,但也困惑, 天氣這可以解決在Nxlog服務器端也?

任何幫助將不勝感激。

+0

是的,這也可以解決在NXLog側xm_multiline。 – b0ti

+0

可以在nxlog端進行哪些準確的配置更改? 我nxlog文件:http://stackoverflow.com/questions/33233633/nxlog-ignores-multiline-tomcat-stacktraces-while-sending-to-papertrail –

回答

2

我認爲答案取決於你的日誌如何在rsyslog中結束。如果有一個appender而不是將內容發送到syslog套接字,則取決於它。據我所知,你可以在那裏發送多行日誌,但是如果appender在訪問rsyslog之前打破它們,那麼你可以在那裏做很多事情。這同樣適用於UDP轉發,每個數據包都是一個日誌,所以rsyslog只需要它就可以了。

如果它通過TCP發送,則消息的默認分隔符是換行符。雖然rsyslog支持八位字節分隔幀,但這仍然是發送端需要處理的事情。

但是,如果您正在拖拽文件,則可以在此處執行某些操作。雖然你可能需要最新版本的rsyslog(Ubuntu包here)。有了它,你會得到兩個重要特徵爲這個用例:

  • inotify的模式(這是默認情況下使用)。在性能方面比輪詢模式好得多,並且與日誌旋轉很好地玩
  • startmsg.regex(它允許您指定一個正則表達式來確定哪一行應該屬於當前事件,哪一行應該啓動一個新的)

問題是,用多行日誌你(或者說rsyslog)必須找出另一種分隔消息的方式。對於imfile,即使在7.4.4中,也可以選擇使用ReadMode,默認爲0(換行符是分隔符),但可以將其設置爲2(如果行以空格/製表符開頭,則屬於前一行)。

您可以找到周圍所有選項imfile這裏:http://www.rsyslog.com/doc/master/configuration/modules/imfile.html

+0

所以基本上我也跟着升級換代過程和做調整我的rsyslog現在文件。我目前的版本是8.13.0的LF幀分隔符,它有助於擺脫空間,但它實際上增加了一些更多的字符來代替換行符。再加上當日誌被轉儲到NXLog服務器上時,nxlog服務器完全忽略了這些分隔符日誌和不能發送到papertrail ..所有其他日誌被髮送到papertrail雖然 –

+0

你可以嘗試全局(parser.escapeControlCharactersOnReceive =「關」)?這是默認情況下,我認爲這是換行的原因。 –

+0

你的意思是$ EscapeControlCharactersOnReceive關上rsyslog.conf ..對不對? –