Linux и серверы

Rsyslogd. Установка и настройка. | Hilik

Материал перенесён из старой базы знаний ATC-IP и оформлен в едином стиле нового сайта.

Hilik
Настроим все.
Ноя
17
2009
Rsyslogd. Установка и настройка.
При обслуживании большого количества серверов, раньше или позже возникают проблемы поиска информации в логах(системных журналах уведомлений). Нужно найти определенное событие, например прошедшее через несколько серверов письмо. Лезешь на сервер, ищешь лог файл, потом ищешь в нем письмо, переходишь к следующему серверу и т.п. Пока не отследишь письмо. Что бы ускорить процесс поиска, убрав необходимость блуждания по серверам, можно построить отдельный сервер для хранения логов.
Построить его можно на основе обычного syslogd, который входит в базовую FreeBSD.
Но тут есть несколько нюансов. В обычном syslogd сильно ограничены возможности фильтрации. Нет фильтрации по адресу сервера, а только по стандартным syslogовским свойствам. И в итоге получится, что уведомления от всех серверов в один файл. Это первый аргумент в сторону rsyslogd. Rsyslogd позволяет фильтровать по целому ряду признаков. Включая регулярные выражения. Второй аргумент, это возможность использования протокола tcp, в отличии от стандартного udp протокола syslogd. Плюс использования протокола tcp, заключается в том, что отправляющая сторона, контролирует прием записей сервером. И при отсутствии соединения с принимающим сервером, может писать логи на резервный сервер или в локальный файл.
Устанавливать будем и на сервере логов и на клиенте. Устанавливаем из портов на всех точках.
cd
usr
ports
sysutils
rsyslog4
make
install
clean
А настраивать начнем с клиента. Клиент просто пишет все файлы локально и отправляет все сообщения по tcp на логсервер. Поэтому файл настроек /usr/local/etc/rsyslog.conf выглядит так:
#Принимаем только локальные записи в syslogd по udp
$AllowedSender
UDP, 127.0.0.1
#Тут описываем права и владельцев локальных файлов
$umask
0000
$FileGroup
nobody
$FileOwner
nobody
#Шаблон с которым пишутся файлы. Воспроизводит
#стандартный syslogd формат
$template
TraditionalFormat,
"%timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%
\n
#Локальные логи. Настройки взяты из стандартного /etc/syslog.conf
#только в конце каждого лог-файла описан формат в
#котором писать сообщения
.err;kern.warning;auth.notice;mail.crit
dev
console;TraditionalFormat
.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err
var
log
messages;TraditionalFormat
security.
var
log
security;TraditionalFormat
auth.info;authpriv.info
var
log
auth.log;TraditionalFormat
mail.info
var
log
maillog;TraditionalFormat
lpr.info
var
log
lpd-errs;TraditionalFormat
ftp.info
var
log
xferlog;TraditionalFormat
cron.
var
log
cron;TraditionalFormat
.=debug
var
log
debug.log;TraditionalFormat
#Теперь самая интересная часть. Отправляем копию сообщений
#на лог сервер по tcp. То что именно по tcp настраивается
#количеством символов @. Одно @ - udp, два @ - tcp
@@
192.168.0.1
# tcp
#Приведенные ниже строки отвечают за то, что бы
#при отсутствии связи с логсервером не терялись логи.
$ActionExecOnlyWhenPreviousIsSuspended
on
#при исчезновении сервера, логи пишутся в описанный ниже файл
#тут можно перед файлом описать один или несколько резервных
#лог серверов, тогда в файл будет писаться информация только в том случае,
#если все они не доступны. Сервера описываются так:
#& @@192.168.1.2
var
log
localbuf
$ActionExecOnlyWhenPreviousIsSuspended
off
Теперь настраиваем сервер. Запускать пока на клиенте не будем. Сначала настроим сервер, запустим и вернемся к клиенту.
На сервере /usr/local/etc/rsyslog.conf выглядит так:
#Загружаем модуль UDP сервера
$ModLoad
imudp
#Pfгружаем модуль TCP сервера
$ModLoad
imtcp
#Загружаем модуль регекспов
$ModLoad
lmregexp
#Принимаем локальные сообщения по UDP
$AllowedSender
UDP, 127.0.0.1
#От наших серверов по TCP
$AllowedSender
TCP, 192.168.0.0
24
#Запускаем UDP сервер
$UDPServerRun
514
#Запускаем TCP сервер
$InputTCPServerRun
514
$umask
0000
$FileGroup
Позвонить +7 (343) 382-33-16