うまいぼうぶろぐ

linuxとhttpdとperlのメモ

rsyslogでsyslogを受信した時刻でlogに出力する

remote hostの時刻がずれている(or UTC) の場合などに、syslogの時刻がずれて嫌な感じなので修正できるか調べた。(ex: vyattaのsyslogがUTCで飛んでくる)
formatを変えれば出来たっぽい。


rhel6系のdefaultのrsyslogのformatは /etc/rsyslog.conf で定義されている変数でlogに吐いてる模様。

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

RSYSLOG_TraditionalFileFormatの説明

RSYSLOG_TraditionalFileFormat - the "old style" default log file format with low-precision timestamps
RSYSLOG_FileFormat - a modern-style logfile format similar to TraditionalFileFormat, buth with high-precision timestamps and timezone information

RSYSLOG_TraditionalFileFormatの定義の詳細

$template FileFormat,"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$template TraditionalFileFormat,"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"


さらにman rsyslog.conf を読んでいると、このpropertyを使えばよさそうだ。

timegenerated
   timestamp when the message was RECEIVED. Always in high resolution

/etc/rsyslog.conf

まとめるとこんなん。

# local timestamp template
$template LocalTimeTraditionalFileFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$template LocalTimeFileFormat,"%timegenerated:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"

$ActionFileDefaultTemplate LocalTimeTraditionalFileFormat
#$ActionFileDefaultTemplate LocalTimeFileFormat