Rsyslog
從特定 rsyslog 配置中刪除格式
我正在建構一個應用程序,它將有很多移動元件。其中一些將由 cron 安排,另一些由使用 inotify 的服務觸發以偵聽文件到達。
因為我希望所有日誌都以統一格式結束,所以我發現自己需要告訴
rsyslog
它應該處理來自特定程序名的所有日誌,而不需要任何額外的格式。我已經使用以下配置在執行 rsyslogd 7.4.7 的 Red Hat 7.3 機器上輕鬆實現了這一點:
$template rawFormat,"%rawmsg%\n" if $programname == 'forwardit' then /var/log/forwardit.log;rawFormat & stop
但是,我現在需要在 Debian Stretch 機器上進行完全相同的配置,執行 rsyslogd 8.24.0,但它並沒有真正工作……
1)我嘗試使用相同的配置文件。結果是日誌行確實被發送到了正確的文件,但它沒有使用模板:
<30>Oct 2 09:51:09 forwardit[24602]: {"task": "forward_file", "event": "Failed.", "timestamp": "2018-10-02T07:51:09.973558Z"}
請注意前面 <30> 的奇怪外觀,這在我的系統日誌中不存在…
2)我認為舊樣式的模板聲明根本不再有效,所以我嘗試了:
template (name="rawFormat" type="string" string="%rawmsg%\n") if $programname == 'forwardit' then /var/log/forwardit.log;rawFormat & stop
結果相同。
3)朝著同一個方向前進,我嘗試更新模板的應用程序:
template (name="rawFormat" type="string" string="%rawmsg%\n") if $programname == 'forwardit' then action(type="omfile" File="/var/log/forwardit.log" Template="rawFormat") & stop
實際輸出仍然沒有變化。
這是
/etc/rsyslog.conf
文件:################# #### MODULES #### ################# module(load="imuxsock") # provides support for local system logging module(load="imklog") # provides kernel logging support #module(load="immark") # provides --MARK-- message capability # provides UDP syslog reception #module(load="imudp") #input(type="imudp" port="514") # provides TCP syslog reception #module(load="imtcp") #input(type="imtcp" port="514") ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # # Set the default permissions for all log files. # $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 # # Where to place spool and state files # $WorkDirectory /var/spool/rsyslog # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf ############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # # Some "catch-all" log files. # *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:*
好的,所以經過更多探勘後,我查看了可用屬性並找到
rawmsg-after-pri
了 ,這解釋了我看到的 <30> 是 rsyslog 所稱的 PRI。這讓我意識到,
rawmsg
不同版本之間的實際內容可能已經發生了變化。所以我將模板改為使用msg
,一切都很好。