Как стать автором
Обновить
1014.07
OTUS
Цифровые навыки от ведущих экспертов

Rsyslog 8. Централизованный сбор логов

Время на прочтение2 мин
Количество просмотров16K
Всем добра.

Заканчиваем в этом месяце первый поток «Администратора Linux» и запускаем потихоньку второй, который теперь будет заметно переработан и усилен новыми преподавателями. Один из них — Алексей Цыкунов, делится сегодня небольшой полезной заметкой.

Поехали.

Задача


Есть несколько серверов, на которых крутятся программы, которые сохраняют логи в свои каталоги.

Необходимо централизовано сохранять все эти логи в подкаталогах по имени серверов, сохраняя названия файлов.

Возможности перенастроить программы для записи логов сразу в syslog нет.

Окружение:

  • server — centos7
  • client — centos6

И на клиенте и на сервере необходимо обновить rsyslog до последней версии.

cd /etc/yum.repos.d/
wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
yum update rsyslog



Решение


Rsyslog имеет следующие стандартные модули:

  • imfile — чтение из файла
  • omfwd — перенаправление (например, в сеть)
  • imtcp — чтение из сети по tcp
  • omfile — запись в файл, встроенный модуль

С помощью них произведен настройку на клиентских машинах и сервере:

На клиенте


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

THE END


Как всегда ждём комментарии, вопросы тут или можно заглянуть на открытый урок и помучать преподавателей там.
Теги:
Хабы:
Всего голосов 15: ↑14 и ↓1+13
Комментарии2

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS