Собираем логи с серверов и сетевого оборудования

syslog-ngЗдесь я постараюсь коротко изложить, как собирать логи с серверов и сетевого оборудования, пошагово, с примерами. Все будет производиться на примере серверов на базе CentOS. Разница между пятой и шестой версией CetnOS связанная с логированием лишь в том, что в 5-й используется syslog, а в 6-й rsyslog.

Для сбора логов будем использовать syslog-ng. Так же, прикрутим удобный инструмент просмотра логов — colortail.

Для начала, на сервере, на котором будем собирать логи, необходимо поставить syslog-ng, предварительно установив репозиторий epel.

# yum install syslog-ng syslog-ng-libdbi
# chkconfig rsyslog off; chkconfig --level 2345 syslog-ng on
# /etc/init.d/rsyslog stop; /etc/init.d/syslog-ng start
# mkdir /var/log/syslog-ng-net

Далее, нам необходимо настроить syslog-ng на приём логов по сети, раскладывать логи будем исходя из IP-адреса оборудования, с которого они приходят.
Добавляем в конец файла /etc/syslog-ng/syslog-ng.conf

# Слушаем сеть на порту udp 514
source net { udp(ip(0.0.0.0) port(514)); };
# сервер1 с адресом 192.168.10.10
destination d_server1 { file("/var/log/syslog-ng-net/server1.log"); };
filter f_server1 { netmask("192.168.10.10/255.255.255.255"); };
log { source(net); filter(f_server1); destination(d_server1); };
# сервер2 с адресом 192.168.10.12
destination d_server2 { file("/var/log/syslog-ng-net/server2.log"); };
filter f_server2 { netmask("192.168.10.12/255.255.255.255"); };
log { source(net); filter(f_server2); destination(d_server2); };

Записи надо добавить по количеству серверов. После этого рестартим syslog-ng

# /etc/init.d/syslog-ng restart

Принимающий сервер готов. Только не забудьте открыть в файрволе (iptables) порт 514 udp для входящий соединений с вашего оборудования.

Переходим к настройкам серверов, с которых будут слаться логи на наш сервер с syslog-ng. Можно слать как все логи, так и толкьо избранные, исходя из разных критериев.
Для всех логов, добавляем в конец файла /etc/rsyslog.conf (6-я версия) или /etc/syslog.conf (5-я версия) следующее:

# syslog-server (подразумеваеться что syslog-ng стоит на сервере с адресом 192.168.10.1)
*.* @192.168.10.1

если мы не хотим отправлять все логи, а только избранные, то вместо того что указано выше, добавляем например:

authpriv.* @192.168.10.1
*.warn @192.168.10.1
*.error @192.168.10.1
kern.* @192.168.10.1

то есть, указываем отправлять все логи входа на сервер, warning и error, а так же сообщения kernel.
перезапускаем syslog(rsyslog)

# /etc/init.d/rsyslog restart

Повторяем все на других серверах, и на принимающем сервере, в папке /var/log/syslog-ng-net/ видим файлы логов с других серверов.

Что бы все это довести до ума, и создать себе удобство, проделаем еще кое-что, а именно, добавим logrotate, чтобы логи сохранять, скажем, 7 дней.

в /etc/logrotate.d/syslog-ng-net

/var/log/syslog-ng-net/*log {
daily
rotate 7
missingok
compress
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

и установим colortail, для удобного просмотра логов.

# rpm -Uhv http://ms1.nserver.us/colortail-0.3.3-1.el6.x86_64.rpm
# cp /usr/share/doc/colortail-0.3.3/example-conf/conf.messages /etc/conf.messages

добавляем алиас в ~/.bashrc

alias ctail='/usr/bin/colortail -k /etc/conf.messages'

правим /etc/conf.messages , чтобы подсвечивать критические ошибки:

logoff и login на принимающий сервер, идем в /var/log/syslog-ng-net , и наблюдаем за логами с первого сервера.

# ctail -f server1.log

Так же мы можем принимать логи от любого сетевого оборудования которое поддерживает отправку логов.

На этом всё,
Удачи в настройках.
© shadow_alone