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

Мы используем syslog-ng на нашем центральном сервере syslog (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);
};

1 ответ

Решение

Проблема была в 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); };
Другие вопросы по тегам