저는 움직이는 부분이 꽤 많은 애플리케이션을 구축하고 있습니다. 이들 중 일부는 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
그러나 이제 rsyslogd 8.24.0을 실행하는 Debian Stretch 시스템에서 정확히 동일한 구성이 필요하지만 실제로는 작동하지 않습니다...
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:*
답변1
글쎄, 좀 더 조사한 후 사용 가능한 속성을 살펴보고 발견했습니다. rawmsg-after-pri
이는 내가 본 <30>이 rsyslog에서 PRI라고 부르는 것임을 설명합니다.
rawmsg
이로 인해 버전마다 실제 내용이 변경되었을 수 있음 을 깨달았습니다 . 그래서 대신 사용할 템플릿을 변경했는데 msg
모든 것이 정상입니다.