Rsyslog

遠端日誌的 rsyslog 條件轉發,將日誌文件中的日期和時間格式化

  • January 25, 2019

我有另一個關於通過 rsyslog.conf 有條件地轉發日誌的問題,我有以下配置。

# cat  /etc/rsyslog.conf
##########################################################################################
# rsyslog configuration file For TCC & TPC
##########################################################################################
#### MODULES ####
$ModLoad imuxsock        # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal       # provides access to the systemd journal
$ModLoad imudp           # Provides UDP syslog reception
$UDPServerRun 514        # Provides UDP syslog reception
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$template tcc-logs, "/data/SYSTEMS/%HOSTNAME%/messages.log"
$template noi-logs, "/data/noiter/%HOSTNAME%/messages.log"

#####################################################################
# Custom conditional Forwarding of messages to the syslog Directory #
###################################################################
if $fromhost startswith "sj-" then -?tcc-logs
& stop

if $fromhost startswith "noi-" then -?noi-logs
& stop


##################################################
#### GLOBAL DIRECTIVES                        ####
#################################################
$WorkDirectory /var/lib/rsyslog                                 # Where to place auxiliary files
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat        # Use default timestamp format
$IncludeConfig /etc/rsyslog.d/*.conf                            # Include all config files in /etc/rsyslog.d/
$OmitLocalLogging on                                            # local messages are retrieved through imjournal now.
$IMJournalStateFile imjournal.state                             # File to store the position in the journal

#### RULES ############################################
# Log anything (except mail) of level info or higher.#
# Don't log private authentication messages!        #
####################################################
*.info;mail.none;authpriv.none;cron.none    ?tcc-logs
authpriv.*       ?tcc-logs                                      # The authpriv file has restricted access.

在上述配置中,我試圖通過以下幾點要求 rsyslog 有條件地轉發日誌:

  1. 如果任何即將到來的主機以rsyslogsj”開頭,那麼它應該轉到“/data/SYSTEMS/目錄”,這將創建另一個具有主機名的目錄,然後將messages.log在此創建一個因此,完整的文件路徑將類似於/data/SYSTEMS/sj-hosts_1/messages.log.
  2. 同樣,如果任何即將到來的主機以rsyslog它開頭,noi-那麼它應該轉到/data/noiter/“目錄”,這將創建另一個具有主機名的目錄,然後將messages.log在此創建一個因此,完整的文件路徑將類似於/data/noiter/noi-hosts_1/messages.log.

以上兩點滿足結果但是問題是messages.log在上述情況下將日期和時間創建為與預設格式不同的格式,範例如下:

2019-01-25T23:20:01-08:00 noi-hosts_1 CROND[8541]: (root) CMD (/usr/lib64/sa/sa1 1 1)

2019-01-25T23:20:01-08:00 noi-hosts_1 CROND[8542]: (root) CMD (LANG=C LC_ALL=C 

而預設和必需的格式應如下所示:


Jan 25 20:23:58 noi-hosts_1 CROND[8541]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jan 25 20:23:58 noi-hosts_1 CROND[8542]: (root) CMD (LANG=C LC_ALL=C 

筆記:

當我不使用條件轉發時,我曾經得到正確的/預設的,如上所示。

您的條件規則if $fromhost ...接近配置的開始,並使用預設的日誌記錄樣式,對於 rsyslog 來說現在是RSYSLOG_FileFormat. 您稍後將預設值更改為想要RSYSLOG_TraditionalFileFormat的,但這僅適用於以下任何規則。

因此,只需將您的條件規則在文件中進一步向下移動到註釋塊之後#### RULES ...

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