Назад | Перейти на главную страницу

Перенаправление из rsyslog в syslog-ng по TCP не работает (хотя пакеты достигают сервера)

Мы используем syslog-ng на нашем центральном сервере системного журнала (syslog-ng-2.1.4-9.el5 в CentOS 5.9). Мы с радостью отправляли журналы с использованием syslogd и rsyslog со смешанных хостов Linux и Solaris по UDP до вчерашнего дня, когда мне наконец стало ясно, что мы теряем значительное количество записей (да, я должен был прислушаться к всем предупреждениям).

Я пытаюсь перейти на использование TCP. Я очень хочу (на данный момент) придерживаться syslog-ng в центре и rsyslog для отправителей, и я понимаю, что это должно работать. Центральный сервер системного журнала имеет несколько виртуальных интерфейсов, которые используются для сегментирования наборов журналов по функциям (вот почему операторы udp () и tcp () указывают IP-адрес для привязки).

Я включил прослушиватели TCP на конце syslog-ng (см. Отрывок из файла конфигурации ниже) - netstat -l показывает прослушивателей на порту 514. В качестве теста я изменил предложение пересылки на одном хосте (CentOS 6.4 с rsyslog-5.8.10-6 .el6.x86_64) с @unixlog на @@ unixlog. Я вижу пакеты, поступающие на центральный сервер, и пакеты, возвращающиеся (просматривая с помощью tcpdump в unixlog), поэтому я думаю, что устранил проблемы с iptables, однако в выходном файле ничего не отображается. Я просто попробовал на время отключить iptables, чтобы проверить это - тоже самое.

Я не пробовал включать отладку для syslog-ng, потому что это загруженный сервер - моим следующим шагом, вероятно, будет установка тестового сервера syslog-ng и указание на него одного хоста. Прежде чем я это сделаю, есть ли еще что-нибудь, на что я должен обратить внимание? Мне нужно изменить формат пересылаемых сообщений? Мое чтение документации Syslog-ng 2.x предполагает, что это должно работать без каких-либо изменений. Я попытался изменить параметр уровня совместимости, с которым вызывается rsyslog. Изначально было установлено 5, я пробовал 0 .. 4 и полностью удалил параметр - никакой разницы в поведении.

Rsyslog.conf для отправителя (без комментариев и локальных файлов)…

$ModLoad imuxsock
$ModLoad imklog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
*.err;kern.debug;daemon.notice;mail.crit                @unixlog.ncl.ac.uk
local3.debug                                            @cmdloghost.ncl.ac.uk

Извлечение из rsyslog.conf в unixlog

options {
  long_hostnames(off);
  sync(0);
  create_dirs(yes);
};

destination d_syslog {
  file("/var/log/incoming/syslogs/$HOST/syslog.$YEAR$MONTH$DAY.log");
};

# unixlog is 10.8.232.202
source unixlog_net { udp(ip(10.8.232.202)); tcp(ip(10.8.232.202)); };

log {
  source(unixlog_net);
  destination(d_syslog);
};

Проблема заключалась в tcpwrappers, что стало очевидным после того, как я установил тестовый экземпляр syslog-ng и запустил его с включенным выводом отладки. Добавление следующего предложения в /etc/hosts.allow помогло

syslog-ng: 10.0.0.0/255.0.0.0

Также понял, что мы не обрабатываем внутренние сообщения syslog-ng (которые вполне могли рассказать нам, в чем проблема). Для этого добавлены следующие строки ...

# Deal with syslog-ng's own messages
source s_internal { internal(); };
destination d_internal {file("/var/log/syslog-ng.log"); };
log { source(s_internal); destination(d_internal); };