Передача логов на один сервер

Вот не хочется устанавливать ворох ПО на серверы для сбора логов в одном месте. Хочется использовать что-то уже предустановленное. Будем организовывать передачу логов на один сервер (может на 2, а может и на 3 — все зависит от нагрузок на систему и передаваемого трафика). В данной статье речь пойдет об операционных системах Debian и CentOS (просто они у нас есть).

Серверная часть

В общем в подавляющем большинстве на этих ОС rsyslog уже установлен, по этому почему бы не взять его? Ну значит так и сделаем!

Первоначально выбираем узел (машину) (в моем случае Debian 11), где мы будем все это собирать, и добавляем все в конфигурационный файл по пути /etc/rsyslog.d/server.conf и записываем следующее содержимое в файл:


# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="5514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="5514")

$template remote-incoming-logs,"/var/log/%FROMHOST-IP%/%PROGRAMNAME%.log"
*.* ?remote-incoming-logs

В данном файле я разрешаю создание сервера по протоколу tcp и udp. Порт указан отличный от стандартного. Стандартный же порт 514. Так же в моем случае при входящих событиях я указываю шаблом пути сохранения логов в директорию ip-адреса и программы, логи которой необходимо получить.

После перезапускаем службу:


systemctl restart rsyslog

Клиентская часть

С другой стороны все тоже достаточно просто. На другом сервере по пути /etc/rsyslog.d/client.conf вписываем следующие настройки:


#Enable sending system logs over UDP to rsyslog server
*.* @:5514
#Enable sending system logs over TCP to rsyslog server
*.* @@ip-адрес сервера для отправки:5514
$ActionQueueFileName queue
$ActionQueueMaxDiskSpace 10g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1

Тут тоже все достаточно просто, но с парой нюансов.

Есть 2 правила, которые говорят отправлять данные на удаленный сервер, которые практически одинаковые, но все же разница есть. Первое правило с одним символом «собаки» (@) указывает клиенту, что отправка производится по протоколу UDP, в с двумя «собаками» — по TCP.

Следующие 5 строчек обозначают, что данные нужно кэшировать (если удаленный сервер будет недоступен): имя файла очереди, размер очереди, сохранять очередь при выключении, использовать связный список, в случае неудачной попытки отправки данных пытаться отправлять данные «бесконечно».

В принципе это тот минимум, который требуется (для начала).

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

Nginx

В сервер Nginx есть встроенный модуль для отправки логов через rsyslog. Более подробно об этом можно почитать на официальном сайте.

Чтобы передавать логи в конфигурационном файлы в секции server необходимо добавить несколько строк:


access_log syslog:server=<адрес сервера rsyslog>:<порт>,facility=local7,tag=<тэг>,severity=info combined;
error_log syslog:server=<адрес сервера rsyslog>:<порт> debug;

Если на сервере несколько сайтов, то данные настройки нужно прописать на каждый из них.

После настройки перезапускаем сервер:


nginx -t
nginx -s reload

Прощай место

Так как логи пишутся постоянно, то они имеют тенденцию «съедать» диск. Как-то нужно их перерабатывать. Для таких целей в системе еще одна предустановленная служба — logrotate.

Возвращаемся на сервер, где у нас собираются логи и открываем файл /etc/logrotate.d/remote:


var/log/127.0.0.1/*.log
/var/log/10.x.x.x/*.log
/var/log/10.x.x.x/*.log
/var/log/10.x.x.x/*.log {
    hourly
    missingok
    rotate 1
    compress
    notifempty
    sharedscripts
    postrotate /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

Заместо 10.x.x.x подставьте свои директории.

В настройках указано, перерабатывать каждый час, хранить один файл истории, сжимать… Более подробно лучше всего обратиться к документации и документации2 (man logrotate).

Что в итоге?

В итоге должен получится сервер по сбору логов с других серверов через интерфейс syslog.

Поделиться
Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

Вы должны быть авторизованы, чтобы разместить комментарий.