我的要求是记录远程机器上的所有消息。为了实现这一目标,我在两台机器上(服务器:192.168.122.12 和客户端:192.168.122.13)安装了两个相同版本的 rsyslog(rsyslogd 8.1901.0(又名 2019.01))。
此外,如果远程机器关闭,我需要缓冲所有消息,以便稍后在线时发送它们。问题是,这会产生非常奇怪的行为。当我关闭远程服务器并记录某些内容时,即使远程机器再次在线,消息也不会发送。有时当我再次记录某些内容时,会发送一些旧的(缓冲的)消息(永远不会发送所有消息)。如您所见,我使用 TCP 连接。
我的配置是:
服务器: /etc/rsyslog.conf
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
module(load="imtcp")
input(type="imtcp" port="514" ruleset="remote")
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$DebugLevel 2
$DebugFile /var/log/rsyslog-debug.log
template (name="DynFile" type="string" string="/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log")
template(name="CustomFileFormat" type="list") {
property(name="timereported" dateFormat="rfc3339")
constant(value=" ")
property(name="hostname")
constant(value=" ")
property(name="syslogtag")
property(name="msg" spifno1stsp="on" )
property(name="msg" droplastlf="on" )
constant(value="\n")
}
ruleset(name="remote") {
action(type="omfile" dynaFile="DynFile" Template="CustomFileFormat")
stop
}
$IncludeConfig /etc/rsyslog.d/*.conf
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
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
*.=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
*.emerg :omusrmsg:*
客户:/etc/rsyslog.conf
$LocalHostName my.test.machine.corp.es
module(load="imuxsock") # provides support for local system logging
module(load="imklog") # provides kernel logging support
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$DebugLevel 2
$DebugFile /var/log/rsyslog-debug.log
*.* action(
type="omfwd"
target="192.168.122.12"
port="514"
protocol="tcp"
queue.type="linkedlist"
queue.size="10000"
queue.filename="fwd_msgs"
action.resumeRetryCount="-1"
queue.saveOnShutdown="on"
action.resumeinterval="30"
)
$IncludeConfig /etc/rsyslog.d/*.conf
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
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
*.=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
*.emerg :omusrmsg:*
答案1
您可以尝试设置这个子句:
$ActionSendTCPRebindInterval nbr- [自 4.5.1 起可用] - 指示 TCP 发送操作在每发送 nbr 条消息后关闭并重新打开与远程主机的连接。默认值为零,表示不进行此类处理。此指令对于负载平衡器非常有用。请注意,这会带来一些性能开销,因此建议不要太频繁地“重新绑定”连接(“太频繁”的实际含义取决于您的配置,经验法则是,它不应比每秒一次更频繁)。
您可以尝试类似的方法$ActionSendTCPRebindInterval 10000
。请记住,如果重新打开连接过于频繁,这会导致一些额外的性能开销。
附言:您可以在文档。