Пересылка из 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); };