Rsyslog

從特定 rsyslog 配置中刪除格式

  • April 22, 2020

我正在建構一個應用程序,它將有很多移動元件。其中一些將由 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,一切都很好。

引用自:https://unix.stackexchange.com/questions/472698