- PVSM.RU - https://www.pvsm.ru -
Всем добра.
Заканчиваем в этом месяце первый поток «Администратора Linux» [1] и запускаем потихоньку второй, который теперь будет заметно переработан и усилен новыми преподавателями. Один из них — Алексей Цыкунов [2], делится сегодня небольшой полезной заметкой.
Поехали.
Есть несколько серверов, на которых крутятся программы, которые сохраняют логи в свои каталоги.
Необходимо централизовано сохранять все эти логи в подкаталогах по имени серверов, сохраняя названия файлов.
Возможности перенастроить программы для записи логов сразу в syslog нет.
Окружение:
И на клиенте и на сервере необходимо обновить rsyslog до последней версии.
cd /etc/yum.repos.d/
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
yum update rsyslog
Rsyslog имеет следующие стандартные модули:
С помощью них произведен настройку на клиентских машинах и сервере:
module(load="imfile" mode="inotify")
# настраиваем темплейт для строки лога
template (name="LongTagForwardFormat" type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%$.suffix%%msg:::sp-if-no-1st-sp%%msg%")
# настраиваем правило для пересылки
ruleset(name="sendToLogserver") {
action(type="omfwd" Target="192.168.1.1" Port="514" protocol="tcp" Template="LongTagForwardFormat")
}
# правило для чтения файлов. обязательно наличие тэга
input(type="imfile"
File="/your_app_path_logs/log/*.log"
tag="apptag__"
ruleset="app_logs"
addMetadata="on")
# установка суффикса из имени лога, имя лога
ruleset(name="app_logs") {
set $.suffix=re_extract($!metadata!filename, "(.*)/([^/]*)", 0, 2, "app.log");
call sendToLogserver
}
На сервере я конфигурил непосредственно /etc/rsyslog.conf
# модуль работы с unix socket
module(load="imuxsock")
# модуль работы с journald
module(load="imjournal")
# наш модуль для сбора данных по сети
module(load="imtcp" MaxSessions="500")
# активация модуля с назначением правил
input(type="imtcp" port="514" ruleset="remote")
# темплейт для динамической записи в папку с именем хоста и с именем файла, соответствующему имени файла на клиенте
template(name="RemoteHost" type="string" string="/opt/pabkss/%HOSTNAME%/%$.logpath%")
# темплейт для записи изначального текста
template(name="OnlyMsg" type="string" string="%msg:::drop-last-lf%n")
# непосредственно правила обработки
ruleset(name="remote") {
# разбираем наши логи, выстраиваем правильный путь
set $.logpath = replace($programname, "__", "/");
action(type="omfile"
dynaFile="RemoteHost" template="OnlyMsg")
}
systemctl restart rsyslog
Как всегда ждём комментарии, вопросы тут или можно заглянуть на открытый урок [3] и помучать преподавателей там.
Автор: MaxRokatansky
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/276801
Ссылки в тексте:
[1] «Администратора Linux»: https://otus.pw/L340/
[2] Алексей Цыкунов: https://otus.pw/lECT/
[3] открытый урок: https://otus.pw/Avh9/
[4] Источник: https://habrahabr.ru/post/352682/?utm_campaign=352682
Нажмите здесь для печати.