rsyslog - дублирование логов с помощью 2 серверов

Я использую 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) стандарт.

0
09.02.2017, 03:25
1 ответ

Вы могли бы сделать это , используя условные выражения , хотя конфигурация синтаксиса rsyslog зависит от версии, которую вы используете, и эта версия CentOS устаревает.

После конфигурации вашего udp-сервера ( UDPServerRun или аналог) и перед директивами, пересылающими сообщения на удаленный компьютер, вы можете попробовать добавить следующее:

if $fromhost-ip startswith '10.0.0.' then /var/log/remotelogs.log
& ~

Этот должен отправлять удаленные журналы в отдельный файл и предотвратить дальнейшую обработку / ретрансляцию.

Хотя, если вы собираетесь пересылать сообщения системного журнала, я рекомендую вам рассмотреть возможность установки выделенного прокси-сервера / сервера хранения системного журнала - даже двух, если хранение дубликатов является обязательным. Если вы думаете, что простой сервер системного журнала не стоит вашего времени: вы можете взглянуть на Logstash (и стек ELK в целом) или Splunk ... может быть, как побочный проект.

1
28.01.2020, 02:46

Теги

Похожие вопросы