Мое требование - регистрировать все сообщения на удаленном компьютере. Для достижения цели у меня есть две идентичные версии rsyslog (rsyslogd 8.1901.0 (также известный как 2019.01)) на обеих машинах (сервер: 192.168.122.12 и клиент: 192.168.122.13).
Кроме того, если удаленная машина не работает, мне нужно буферизовать все сообщения, чтобы отправить их позже, когда она будет в сети. Проблема в том, что это очень странное поведение. Когда я выключаю удаленный сервер и записываю что-то, сообщение никогда не отправляется, даже когда удаленный компьютер снова в сети. Иногда, когда я что-то записываю снова, отправляются некоторые из старых (буферизованных) сообщений (но не все). Как видите, я использую 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:*
Вы можете попробовать настроить этот пункт:
$ ActionSendTCPRebindInterval nbr- [доступно с версии 4.5.1] - указывает действию TCP-отправки на закрытие и повторное открытие соединения с удаленным хостом после каждого числа отправленных сообщений. Нулевое значение по умолчанию означает, что такая обработка не выполняется. Эта директива полезна для использования с балансировщиками нагрузки. Обратите внимание, что с этим связаны некоторые накладные расходы на производительность, поэтому рекомендуется не слишком часто «повторно связывать» соединение (что на самом деле означает «слишком часто», зависит от вашей конфигурации, практическое правило заключается в том, что это не должно быть намного больше чаще, чем раз в секунду).
Вы можете попробовать что-то вроде $ActionSendTCPRebindInterval 10000
. Имейте в виду, что это вызывает дополнительную нагрузку на производительность, если соединение повторно открывается слишком часто.
PS. Вы можете прочитать это на документация.