Я использую rsyslog и пытаюсь сделать следующую конфигурацию:
1. Server 1 - log all local messages and log messages from server2
2. Server 2 - log all local messages and log messages from server1
Таким образом, оба сервера должны содержать как локальный, так и удаленный syslog.
Поэтому в разделе пересылки rsyslog.conf я прописал следующие конфигурационные файлы:
SERVER1:
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName server1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@10.0.0.2
# ### end of the forwarding rule ###
SERVER2:
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName server2 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
*.* @@10.0.0.1
# ### end of the forwarding rule ###
Проблема в том, что это приводит к ситуации, похожей на бесконечный цикл. Т.е. каждая система получает свои собственные, а затем все новые записи, поступающие от каждой системы. Таким образом, лог-файлы быстро заполняются идентичной информацией, которая постоянно повторяется снова и снова.
Есть ли какой-то способ сделать то, что я хочу?
Я использую rsyslog v5 (RHEL 6/Centos 6) стандарт.
Вы могли бы сделать это , используя условные выражения , хотя конфигурация синтаксиса rsyslog зависит от версии, которую вы используете, и эта версия CentOS устаревает.
После конфигурации вашего udp-сервера ( UDPServerRun
или аналог) и перед директивами, пересылающими сообщения на удаленный компьютер, вы можете попробовать добавить следующее:
if $fromhost-ip startswith '10.0.0.' then /var/log/remotelogs.log
& ~
Этот должен отправлять удаленные журналы в отдельный файл и предотвратить дальнейшую обработку / ретрансляцию.
Хотя, если вы собираетесь пересылать сообщения системного журнала, я рекомендую вам рассмотреть возможность установки выделенного прокси-сервера / сервера хранения системного журнала - даже двух, если хранение дубликатов является обязательным. Если вы думаете, что простой сервер системного журнала не стоит вашего времени: вы можете взглянуть на Logstash (и стек ELK в целом) или Splunk ... может быть, как побочный проект.